作者:
NTUmaki (西木野真姬)
2020-08-10 18:22:07https://i.imgur.com/AtNCTE2.jpg
想問這個算法有race condition是因為 producer, consumer 各不只一個嗎?
我記得老師說 in out buffer有 race condition 但看不出來在哪
作者:
A4P8T6X9 (殘廢的名偵探)
2020-08-10 21:37: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:00P/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:00Load完切走沒關係啊 另一邊並不會改動in 值? 你的意思是說in=(in+1)%n 還沒執行完就被 consumer 切去判斷in==out嗎? 這樣頂多他那次迴圈判斷浪費 但不會影響執行結果的正確性啊
我看很久沒問題 只有 下一個演算法的count 因為兩邊有做運算可能導致錯誤結果 其他幾個變數都不會因為concurrent導致錯誤結果這問題明明就給個例子就解決了== 問那麼長