Re: [問題] pthread同步問題

看板C_and_CPP作者時間12年前 (2013/01/24 14:47), 編輯推噓1(103)
留言4則, 3人參與, 最新討論串3/3 (看更多)
不太懂你的意思@@? 不是這樣就可以了嗎 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

01/24 22:48, , 1F
這code看起來好像會race condition XDD
01/24 22:48, 1F
怎說@@?

01/24 23:06, , 2F
mTicket++ or mTicket-- 好像不是 atomic operation XD
01/24 23:06, 2F
ok 加個lock>< ※ 編輯: FAITHY 來自: 124.8.145.44 (01/24 23:43)

01/25 09:09, , 3F
哦哦 這樣也可以~~當初是想說不要用mutex做一個同步函數看看
01/25 09:09, 3F

01/25 09:21, , 4F
想看有沒有用mutex速度有沒有差~~
01/25 09:21, 4F
文章代碼(AID): #1H0KcMEV (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
3
19
完整討論串 (本文為第 3 之 3 篇):
問題
3
19
問題
2
5
文章代碼(AID): #1H0KcMEV (C_and_CPP)