生產者程序和消費者程序如何同時訪問共享記憶體裡的多個緩衝區?

時間 2021-06-05 15:18:03

1樓:

這種需求應該是用lock free佇列。

而且1寫1讀的lock free佇列實現並不太難。

如果自己沒把握寫得對,那就直接在網上找這些庫吧。

2樓:Chrim

剛好再看Modern Operating Systems P128

緩衝區的作用主要是保證事件處理的順序吧

如果只有緩衝區 size =1 那順序就無法保證了

3樓:dong

這個問題有乙個簡單有效的解決辦法:

生產者消費者佇列裡面僅僅管理指標,大家操作佇列時是互斥的,但修改指標的時間非常短暫,因此併發性依舊可以很好。

拿你前面的例子來說,具體的方案可以如下:

假設你有100個緩衝區,編號為1..100,首先有乙個full的佇列,初始為空,乙個empty佇列,初始內容為1..100,P從empty取緩衝區,取到編號為n的緩衝區後,操作n緩衝區,完成之後把n緩衝區放到full佇列中。

C從full取緩衝區,取出緩衝區k,操作k緩衝區,完成之後把k放到empty佇列。互斥操作僅僅限於訪問乙個int,不會限制併發;同時不會發生兩個程序同時操作同乙個緩衝區的情況。

如果你的共享緩衝區數量多於生產者數量,那麼事情可以簡化,保持乙個空閒的緩衝區列表,P與C互斥的訪問該空閒列表,進行緩衝區的申請與釋放操作,然後用經典的方式操作生產者消費者佇列裡的指標就可以了。

經濟的源頭是消費者還是生產者?

眉宇 首先生產決定消費 1,生產決定消費物件。我們的消費物件必須生產出來,否則就談不上消費。2,生產決定消費方式。3,生產決定消費水平和質量。4,生產為消費創造動力。如沒有汽車的生產,就沒有人們對家庭轎車的強烈嚮往。其次,消費對生產具有重要的反作用。1,消費的發展促進生產的發展。2,消費所形成的新的...

python 多程序,乙個生產者(資料未重複),多個消費者消費重複了 怎麼解決?

淡定 本人計算機半路出家人員 看著你提出的問題有點像作業系統中講的一類問題,不知道我的理解對了沒 你可以看一下關於作業系統訊號量解決系統資源分配的問題,看看能否幫你答疑解惑 我記得應該專門針對生產者與消費著這一問題有專門的講解 Justin Z 提供兩條思路 multiprocessing模組下有L...

如何評價Minecraft內容生產者3TUSK?

梨木 3T在我看來是個非常可靠的人,是的在各種意義上 我跟他的交集雖然只在Minecraft圈子內,但是無論在那個角度上,看他說的各種話,無不透露自己獨特的見解,朴善的內心,如果網路是乙個人的縮影,那麼代入現實,我相信3T也許是個傲嬌的老好人。 酒石酸菌 媽耶,為什麼會有人問這個問題 我與3T的認識...