[問題] linux中thread間的同步問題

看板C_and_CPP (C/C++)作者 (安安)時間13年前 (2012/12/18 12:54), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) LINUX G++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) pthread 問題(Question): 小弟最近在試thread程式 在thread間的同步遇到了一點問題 我寫了一個簡單的程式碼 內容很簡單 有一個thread數量大小的global array叫all_ok_or_not thread內會有各自計步器step 當thread執行完自己的任務後 會各自把step++ 然後到all_ok_or_not把自己id對應的那格填入step(代表我這條thread做完了) 接著一個while迴圈會去call函數check_all_ok check_all_ok就是去檢查是否all_ok_or_not中大家都==step(大家做完了) 是回傳1 否則0 當大家都做完了 check_all_ok會回傳1 則每條thread都可以通過那個while繼續往下做 不過我這樣寫跑到一半就會停住(thread數>1時) thread數1的時候是可以跑完的 請問哪邊有問題嗎? 麻煩各位給我一點意見 感謝 預期的正確結果(Expected Output): 應該要可以正常執行完 錯誤結果(Wrong Output): 跑到一半卡住 停了 程式碼(Code):(請善用置底文網頁, 記得排版) http://ideone.com/bhwTml -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.109.16.164

12/18 13:50, , 1F
我覺得你的lock2沒意義,都用lock比較好
12/18 13:50, 1F
ok 已經改過了 不過還是會卡住囧 ※ 編輯: ChineseKing 來自: 140.109.16.164 (12/18 14:15)

12/18 14:31, , 2F
68行的!=改成>就行了
12/18 14:31, 2F

12/18 14:32, , 3F
!=會錯的原因是 如果有個thread快其他人一輪
12/18 14:32, 3F

12/18 14:33, , 4F
跑在後面的thread的check_all_ok就會一直fail
12/18 14:33, 4F

12/18 14:38, , 5F
你可以試試用pthread_cond_wait和pthread_cond_signal
12/18 14:38, 5F

12/18 14:55, , 6F
恩 解決了 十分感謝!!
12/18 14:55, 6F
文章代碼(AID): #1Gp_S8iJ (C_and_CPP)
文章代碼(AID): #1Gp_S8iJ (C_and_CPP)