[理工] 作業系統 Producer-Consumer

看板Grad-ProbAsk作者 (西木野真姬)時間5年前 (2020/08/10 18:22), 5年前編輯推噓5(5023)
留言28則, 5人參與, 5年前最新討論串1/1
https://i.imgur.com/AtNCTE2.jpg
想問這個算法有race condition是因為 producer, consumer 各不只一個嗎? 我記得老師說 in out buffer有 race condition 但看不出來在哪 ----- Sent from JPTT on my iPhone -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 27.247.35.73 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Grad-ProbAsk/M.1597054929.A.A0F.html ※ 編輯: NTUmaki (27.247.35.73 臺灣), 08/10/2020 18:29:31 ※ 編輯: NTUmaki (27.247.35.73 臺灣), 08/10/2020 18:31:12

08/10 21:37, 5年前 , 1F
生產者跟消費者同時做事會爆
08/10 21:37, 1F
我找不到哪個地方 這兩者會對同一塊位址做讀寫 consumer拿跟producer放的位址應該一直都不一樣?

08/10 22:12, 5年前 , 2F
Producer(P)是load, Consumer(C)是store
08/10 22:12, 2F

08/10 22:12, 5年前 , 3F
P&C這兩個thread同時執行,操作的buffer會有
08/10 22:12, 3F

08/10 22:12, 5年前 , 4F
race condition
08/10 22:12, 4F

08/11 10:27, 5年前 , 5F
不太懂 race condition 在哪 buffer的位址沒有變 他們拿
08/11 10:27, 5F

08/11 10:27, 5年前 , 6F
跟存的位址也不一樣 應該不會同時對同一個位址做存取?
08/11 10:27, 6F
※ 編輯: NTUmaki (27.247.35.73 臺灣), 08/11/2020 10:28:49

08/11 10:40, 5年前 , 7F
從底層來看 他們都只是拿buffer起始位址去運算 只有讀 而
08/11 10:40, 7F

08/11 10:40, 5年前 , 8F
且算完結果也不一樣(我自己trace了幾次 應該是不會一樣
08/11 10:40, 8F

08/11 10:40, 5年前 , 9F
)不會race condition 才對呀?
08/11 10:40, 9F

08/11 17:33, 5年前 , 10F
P/C各跑一個concurrent thread可能會有不同結果
08/11 17:33, 10F
可以請問是什麼順序會造成問題嗎 因為我trace後覺得應該是不會有發生對同一個變數做RW或WW ※ 編輯: NTUmaki (27.247.35.73 臺灣), 08/11/2020 19:21:36

08/11 19:26, 5年前 , 11F
我還是看不出來buffer哪邊有問題,in out他們根本沒有互
08/11 19:26, 11F

08/11 19:26, 5年前 , 12F
相寫 應該不可能有race condition,buffer他們存入/取出
08/11 19:26, 12F

08/11 19:26, 5年前 , 13F
的位置也是不同的(只是起始位置相同 但RR不會 race cond
08/11 19:26, 13F

08/11 19:26, 5年前 , 14F
ition
08/11 19:26, 14F

08/11 21:53, 5年前 , 15F
不一定要互相寫才會race condition
08/11 21:53, 15F
但他們的讀寫哪邊會造成錯誤?

08/11 21:54, 5年前 , 16F
另一邊讀也可能讀到寫前或寫後
08/11 21:54, 16F
讀到寫前寫後不會影響正確性啊? ※ 編輯: NTUmaki (27.247.35.73 臺灣), 08/11/2020 22:26:51

08/11 22:27, 5年前 , 17F
他們都是存完、取完才去更動in out 應該不會有錯?
08/11 22:27, 17F

08/11 22:28, 5年前 , 18F
可以給個會錯的例子嗎QQ 我看不太出來哪一種執行順序會導
08/11 22:28, 18F

08/11 22:28, 5年前 , 19F
致錯誤結果
08/11 22:28, 19F

08/11 22:32, 5年前 , 20F
要用組語的角度看 可能load完就context switch
08/11 22:32, 20F

08/12 09:12, 5年前 , 21F
Load完切走沒關係啊 另一邊並不會改動in 值? 你的意思是
08/12 09:12, 21F

08/12 09:12, 5年前 , 22F
說in=(in+1)%n 還沒執行完就被 consumer 切去判斷in==out
08/12 09:12, 22F

08/12 09:12, 5年前 , 23F
嗎? 這樣頂多他那次迴圈判斷浪費 但不會影響執行結果的
08/12 09:12, 23F

08/12 09:12, 5年前 , 24F
正確性啊
08/12 09:12, 24F

08/12 09:35, 5年前 , 25F
我看很久沒問題 只有 下一個演算法的count 因為兩邊有
08/12 09:35, 25F

08/12 09:35, 5年前 , 26F
做運算可能導致錯誤結果 其他幾個變數都不會因為concur
08/12 09:35, 26F

08/12 09:35, 5年前 , 27F
rent導致錯誤結果
08/12 09:35, 27F

08/12 09:36, 5年前 , 28F
這問題明明就給個例子就解決了== 問那麼長
08/12 09:36, 28F
※ 編輯: NTUmaki (110.26.43.209 臺灣), 08/12/2020 09:37:53
文章代碼(AID): #1VCH_HeF (Grad-ProbAsk)