看板 C_and_CPP 關於我們 聯絡資訊
不太懂你的意思@@? 不是這樣就可以了嗎 void *fun(void *arg){ static int ticket = 0; static pthread_mutex_t mutex; pthread_mutex_lock(&mutex); ticket++; pthread_mutex_unlock(&mutex); while(ticket < MAX_TD_NUM);//等大家都進來 一起做 pthread_mutex_lock(&mutex); ticket--; pthread_mutex_unlock(&mutex); while(ticket > 0); //等大家都做完 } ※ 引述《XXaa (廢文小神童)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : LINUX G++ : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : pthread : 問題(Question): : 小弟之前有發一篇一樣的問題 : 有用板友給的意見 用系統的同步函數寫了一支平行程式 : 不過因為呼叫的太頻繁 反而跑起來變慢了 : 所以目前自己試寫了一個同步的函數 : 不過似乎有點問題 想請各位給我一點意見 : 問題是這樣的 : 我想要生出k條thread id 0~k-1 : 讓它們在固定的地方等全部人都到齊 再往下做 : 所以我就想用一個thread數量大小的array叫round_flag : 然後每個人各自有lock_off變數來計步 : 當我做到這個固定點 我就把round_flag中此thread的id對應的那格寫入lock_off : 然後去確認其他人的round_flag是否也是lock_off或lock_off+1 : (lock_off+1是因為會有人率先通過馬上把lock_off+1又存進來 : 所以若有這種情況也要給他通過) : 不過我跑的時候只有一條thread會通過 之後就卡住了 : 我記得同樣作法在windows下是可以順利跑完 : 請各位給我一點意見 : 謝謝 : 預期的正確結果(Expected Output): : 應該要可以順利跑完 : 錯誤結果(Wrong Output): : 跑到一半卡住 : 程式碼(Code):(請善用置底文網頁, 記得排版) : http://pastebin.com/cf3NVrU1 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 124.8.145.44
purincess:這code看起來好像會race condition XDD 01/24 22:48
怎說@@?
cutekid:mTicket++ or mTicket-- 好像不是 atomic operation XD 01/24 23:06
ok 加個lock>< ※ 編輯: FAITHY 來自: 124.8.145.44 (01/24 23:43)
XXaa:哦哦 這樣也可以~~當初是想說不要用mutex做一個同步函數看看 01/25 09:09
XXaa:想看有沒有用mutex速度有沒有差~~ 01/25 09:21