雙緩衝區

“雙緩衝區”,故名思義就是要有倆緩衝區(簡稱A和B)。這倆緩衝區,總是一個用於生產者,另一個用於消費者。當倆緩衝區都操作完,再進行一次切換(先前被生產者寫入的轉為消費者讀出,先前消費者讀取的轉為生產者寫入)。

1.螢幕繪製相關的領域

為了解決:繪製螢幕時產生“閃爍”或者“蠕動”。
為什麼要使用雙緩衝區?通過前面的學習我們知道當要繪製螢幕時,我們只要調用paint函式即可。其中我們可以使用繪圖方法來繪製任何文字圖形圖像。可是當我們繪製的東西多了之後,你就會發現又是螢幕上的顯示根本不是我們要的結果,很雜亂。細想想,會知道因為paint函式中,我們是一邊繪製一邊顯示,所以當內容過多,就會產生沒繪製完成,就顯示到螢幕上的結果。
因此,雙緩衝區就提供了一個完美的解決方案。我們可以在緩衝區2中繪製圖像,而是用緩衝區1來輸出到螢幕。這樣我們就可以控制繪製和現實的過程,從而避免上面的現象。

2.設備驅動和工控方面

1.為啥要雙緩衝區
記得前幾天在介紹佇列緩衝區 時,提及了普通佇列緩衝區的兩個性能問題:“記憶體分配的開銷”和“同步/互斥的開銷”(健忘的同學,先回去看看那個帖子 複習一下)。“記憶體分配的開銷”已經在介紹環形緩衝區 的時候解決了,而今天要介紹的雙緩衝區,就是衝著同步/互斥的開銷來的。 為了防止有人給咱扣上“過度設計”的大帽子,又得來一個事先聲明:只有當同步或互斥的開銷非常明顯的時候,你才應該考慮雙緩衝區的使用。否則的話,大伙兒還是老老實實用最基本、最簡單的佇列緩衝區吧。
2.雙緩衝區的原理
所謂“雙緩衝區”,故名思義就是要有倆緩衝區(簡稱A和B)。這倆緩衝區,總是一個用於生產者,另一個用於消費者。當倆緩衝區都操作完,再進行一次切換(先前被生產者寫入的轉為消費者讀出,先前消費者讀取的轉為生產者寫入)。由於生產者和消費者不會同時 操作同一個 緩衝區(不發生衝突),所以就不需要在讀寫每一個 數據單元 的時候都進行同步/互斥操作。順便提一下,這又一次展現了空間換時間 的最佳化思路。 但是光有倆緩衝區還不夠。為了做到“不衝突”,還得再搞兩個互斥鎖(簡稱La和Lb),分別對應倆緩衝區。生產者或消費者如果要操作某個緩衝區,必須先擁有對應的互斥鎖。補充一句:要達到“不衝突”的效果,其實可以有多種搞法,今天只是挑一個簡單的來聊。

相關搜尋

熱門詞條

聯絡我們