多程序讀寫乙個緩衝區的機制

2021-06-16 09:46:30 字數 836 閱讀 9618

多程序讀寫乙個緩衝區的機制

今天主管給安排了乙個工作,實現多程序對乙個緩衝區的對操作,做流**的,需要高效率的機制。經過一天的思考,確定了乙個比較好的機制。

把緩衝區設定成1、2兩區,讀程序(多個)去讀1區,同時寫程序(多個)要向2區寫,這樣可以提高一倍的吞吐量。現在問題是當讀程序發現1區沒有了內容,怎麼通知寫程序切換到1區寫,以方便讀程序去2區讀。

解決辦法:設定乙個flag標誌為,1代表讀程序在1區讀操作,2表示讀程序在2區。設定四個訊號燈,0、1分別指示讀程序在1、2區的個數(當然也可以用乙個來表示,因為讀程序在同乙個時間只能在乙個區操作),2、3代表寫程序在1、2區的個數。

具體描述:假設一開始flag = 2.讀程序在2區,寫程序在1區(當緩衝區滿了,把老資料覆蓋),當有讀程序進入2區時,都要進行v(0)操作,來表示現在有多少個程序在讀操作(當然讀的時候,要對對應的臨界區互斥,即索引值,稍微多說一下,由於每次操作都是很大的資料,所以需要一定時間,但是修改索引值的時間很短,所以可以多個程序在讀寫操作,可以看一下生產者-消費者),當讀程序操作完成後,進行p(0)操作。大家相安無事。

當又來乙個讀操作,發現2區已經沒有資料可讀,立即把flag=4(若一開始flag=1,則把flag =3),然後去檢視1區是否有寫程序,若有,則阻塞。直到1區沒有寫程序。第乙個進入1區的程序把flag置為1。

當來了乙個寫程序,檢視flag=4,知道讀程序原來在2區操作,而現在2區已經沒有資料可讀,所以它要去2區寫資料,當然要先檢視2區是否還有讀程序在操作,有則阻塞。直到2區沒有讀程序。

上面的機制建立在程序不能出現異常,也就是說操作一定完成的前提下,假設有讀程序在2區出現問題,一直不進行v(0)操作,則寫程序是無法進入的。  by rainfish

多程序讀寫乙個緩衝區的機制

今天主管給安排了乙個工作,實現多程序對乙個緩衝區的對操作,做流 的,需要高效率的機制。經過一天的思考,確定了乙個比較好的機制。把緩衝區設定成1 2兩區,讀程序 多個 去讀 1區,同時寫程序 多個 要向 2區寫,這樣可以提高一倍的吞吐量。現在問題是當讀程序發現 1區沒有了內容,怎麼通知寫程序切換到 1...

兩棧共用乙個緩衝區

年 月 日 兩個棧共用乙個緩衝區 儲存格式 base2 top2 top1 base1 include include include include typedef int element t 兩個棧的資料結構 typedef struct tag stack t stack t 初始化,分配記憶...

如何實現乙個迴圈緩衝區模型

下面是乙個ringbuffer模型的完整實現,歡迎讀者參考和指正 typedef unsigned char byte template class ringbuffer ringbuffer ringbuffer const ringbuffer copy m poppos 0 else m pu...