1
스레드가 브로드 캐스트 신호를 수신 할 준비가되었는지 확인하는 다른 방법이 있습니까? 나는 main에서 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로 설정하면됩니다. –
나는 그것을 시험해 보았다, 그것은 작동하지 않는다 –