私はそれをテストするための簡単な実験をした:"pthread_cond_wait"はメインスレッドがスリープ状態になるのを待たずに、なぜですか?
- メインスレッドのサブスレッドを作成します。
- サブスレッドは条件変数を通知するためにメインスレッドを待機します。
- メインスレッドは3秒間スリープし、 "cond"を通知します。それからサブスレッドが "cond_wait"から目を覚まして印刷することを期待します。
コード:
#include <pthread.h>
#include <unistd.h>
#include <cassert>
#include <iostream>
using namespace std;
pthread_mutex_t mt;
pthread_cond_t cond;
pthread_t tid;
void* tf(void*arg){
pthread_mutex_lock(&mt);
pthread_cond_wait(&cond, &mt);
cout<<"After main thread sleeps 3 seconds\n";
return NULL;
}
int main(){
assert(0==pthread_mutex_init(&mt,NULL));
pthread_create(&tid,NULL,tf,NULL);
sleep(3);
pthread_cond_signal(&cond);
pthread_join(tid,NULL);//Is 2nd parameter useful?
pthread_cond_destroy(&cond);
return 0;
}
しかし、一度 "メインスレッドは3秒スリープした後、" 実際には、サブスレッドが印刷されます。どこが間違っていたのですか?
ありがとうございました。