[問題] pthread同步問題
開發平台(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)
→
01/24 19:16, , 1F
01/24 19:16, 1F
→
01/24 19:19, , 2F
01/24 19:19, 2F
→
01/24 19:42, , 3F
01/24 19:42, 3F
我那支程式主要是
生k條thread t0~tk-1
由t0負責準備資料
其他人等資料準備完 所有人一起開始做
之後其他人繼續等 t0準備資料 如此直到做完
所以會分兩塊
if(ID==t0){
while(還有剩餘資料){
準備資料;
pthread_barrier_wait //等大家到齊
一起做; <-主要就差這裡 原本只有一個人在做 現在生k個一起做
理論上可縮短時間 至少不會比1人作慢吧?
pthread_barrier_wait //等大家都做完
}
}
else{ //ID!=t0
while(還有剩餘資料){
pthread_barrier_wait //等大家到齊
if(有工作做)
一起做;
pthread_barrier_wait //等大家都做完
}
}
不過跑出來的結果 比只有1人做慢很多 推測是pthread_barrier_wait叫的太頻繁所以變慢
所以我這篇才會想自己寫一個同步函數看看
推
01/24 20:27, , 4F
01/24 20:27, 4F
→
01/24 20:28, , 5F
01/24 20:28, 5F
→
01/24 20:40, , 6F
01/24 20:40, 6F
→
01/24 20:41, , 7F
01/24 20:41, 7F
※ 編輯: XXaa 來自: 114.42.155.97 (01/24 21:13)
推
01/24 21:30, , 8F
01/24 21:30, 8F
→
01/24 21:47, , 9F
01/24 21:47, 9F
推
01/24 23:35, , 10F
01/24 23:35, 10F
→
01/25 09:18, , 11F
01/25 09:18, 11F
→
01/25 09:46, , 12F
01/25 09:46, 12F
→
01/25 09:47, , 13F
01/25 09:47, 13F
→
01/25 09:50, , 14F
01/25 09:50, 14F
→
01/25 09:51, , 15F
01/25 09:51, 15F
→
01/25 09:52, , 16F
01/25 09:52, 16F
→
01/25 10:06, , 17F
01/25 10:06, 17F
→
01/25 10:08, , 18F
01/25 10:08, 18F
→
01/25 10:12, , 19F
01/25 10:12, 19F
討論串 (同標題文章)