不太懂你的意思@@?
不是這樣就可以了嗎
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
01/24 22:48, 1F
怎說@@?
→
01/24 23:06, , 2F
01/24 23:06, 2F
ok 加個lock><
※ 編輯: FAITHY 來自: 124.8.145.44 (01/24 23:43)
推
01/25 09:09, , 3F
01/25 09:09, 3F
→
01/25 09:21, , 4F
01/25 09:21, 4F
討論串 (同標題文章)