[理工] 作業系統 Producer-Consumer

作者: NTUmaki (西木野真姬)   2020-08-10 18:22:07
https://i.imgur.com/AtNCTE2.jpg
想問這個算法有race condition是因為 producer, consumer 各不只一個嗎?
我記得老師說 in out buffer有 race condition 但看不出來在哪
作者: A4P8T6X9 (殘廢的名偵探)   2020-08-10 21:37:00
生產者跟消費者同時做事會爆
作者: b10007034 (Warren)   2020-08-10 22:12:00
Producer(P)是load, Consumer(C)是storeP&C這兩個thread同時執行,操作的buffer會有race condition
作者: NTUmaki (西木野真姬)   2020-08-11 10:27:00
不太懂 race condition 在哪 buffer的位址沒有變 他們拿跟存的位址也不一樣 應該不會同時對同一個位址做存取?從底層來看 他們都只是拿buffer起始位址去運算 只有讀 而且算完結果也不一樣(我自己trace了幾次 應該是不會一樣)不會race condition 才對呀?
作者: f255577 (沈大媽)   2020-08-11 17:33:00
P/C各跑一個concurrent thread可能會有不同結果
作者: NTUmaki (西木野真姬)   2020-08-11 19:26:00
我還是看不出來buffer哪邊有問題,in out他們根本沒有互相寫 應該不可能有race condition,buffer他們存入/取出的位置也是不同的(只是起始位置相同 但RR不會 race condition
作者: f255577 (沈大媽)   2020-08-11 21:53:00
不一定要互相寫才會race condition另一邊讀也可能讀到寫前或寫後
作者: NTUmaki (西木野真姬)   2020-08-11 22:27:00
他們都是存完、取完才去更動in out 應該不會有錯?可以給個會錯的例子嗎QQ 我看不太出來哪一種執行順序會導致錯誤結果
作者: f255577 (沈大媽)   2020-08-11 22:32:00
要用組語的角度看 可能load完就context switch
作者: NTUmaki (西木野真姬)   2020-08-12 09:12:00
Load完切走沒關係啊 另一邊並不會改動in 值? 你的意思是說in=(in+1)%n 還沒執行完就被 consumer 切去判斷in==out嗎? 這樣頂多他那次迴圈判斷浪費 但不會影響執行結果的正確性啊
作者: yagerbomb (ㄅD)   2020-08-12 09:35:00
我看很久沒問題 只有 下一個演算法的count 因為兩邊有做運算可能導致錯誤結果 其他幾個變數都不會因為concurrent導致錯誤結果這問題明明就給個例子就解決了== 問那麼長

Links booklink

Contact Us: admin [ a t ] ucptt.com