1
スレッドがブロードキャスト信号を受信する準備ができていることを確認する方法がありますか?私はメインのSleep(1)関数を置き換えたい。同期する別の方法がありますか
#include <iostream>
#include <pthread.h>
#define NUM 4
using namespace std;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
pthread_t tid[NUM];
void *threads(void *arg){
int tid = (int)arg;
while(true){
pthread_mutex_lock(&mutex);
pthread_cond_wait(&cond,&mutex);
//do some work
cout<<"Thread: "<<tid<<endl;;
pthread_mutex_unlock(&mutex);
}
}
int main(){
for(int i=0;i<NUM;i++){
pthread_create(&tid[i],NULL,threads,(void*)i);
}
Sleep(1);
pthread_cond_broadcast(&cond);
Sleep(1);
pthread_cond_broadcast(&cond);
Sleep(1);
pthread_cond_broadcast(&cond);
return 0;
}
私はpthread_cond_waitの前にメモリバリアを試してみましたが、私はカウンターを使用するのではと思ったが、まだ何も私のために働いていません。
私は何をしないのですか?変更されたコードを最初の投稿に追加しました –
@TomNeumeier述語が* false *の場合に限り、ワーカースレッドはスリープ状態になります。述語を何回かトグルする必要はありません。スレッドがcondvar waitを超えて進んでも問題ない場合は、trueに設定するだけです。 –
私はそれを試した、それdoesnt仕事 –