我有結構的數組。每個結構如下。Ç調用pthread_cond_broadcast似乎廣播到所有COND變量
struct thread_st
{
pthread_t thr;
int conn;
pthread_mutex_t mutex;
pthread_cond_t cond;
};
conn指示線程是否有工作要做。它表示一個任務,如果它是> = 0或等待,如果它是-1。 如果讀取-1它繼續我已經刪除了一點錯誤的處理因此其他等,以縮小塊什麼需要
while (str->conn == -1) {
else {
if (pthread_cond_wait(&str->cond,&str->mutex)) {
if (pthread_mutex_unlock(&str->mutex)) { }
return NULL;
}
printf("here b3\n");
}
}
現在擺在等待使用下面的循環用於廣播,我的問題是,當COND變量被廣播 調用pthread_cond_broadcast(& thr-> COND) 其中THR是類型thread_st上述所有線程的打印「在這裏B3」語句。對於理智的緣故,我已經使用 的thread_st陣列在這裏創建測試(再處理去除錯誤)
struct thread_st pool[TP_SIZE];
for (i = 0; i < TP_SIZE; i++) {
pool[i].conn = -1;
if (pthread_mutex_init(&pool[i].mutex,NULL)) { }
if (pthread_cond_init(&pool[i].cond,NULL)) { }
if (pthread_create(&(pool[i].thr), NULL,worker_thr_routine, pool)) { }
}
任何想法?這是我第一次使用cond和mutex變量的真正嘗試,所以如果我是愚蠢的,請告訴!
由於
更新 螺紋只在位於在陣列中的第一結構中的條件變量的廣播響應。
更新2 找到它。這是我成爲一個白癡。我在哪裏叫pthread創建我通過整個池。我只是想通過池[i]
'而(STR->康恩== -1){否則{'顯然不是有效的C代碼。剩下的是什麼? – 2013-02-26 05:09:03
順便說一句,你的成語處理失敗返回看起來有問題... – 2013-02-26 05:10:16
有一個如果有檢查停止標誌。在每一組空括號中都有一個perror和return語句。 我也即將更新帖子,因爲進一步的測試給了我更多的細節 – Hector 2013-02-26 05:14:55