=====线程1
pthread_mutex_lock(&mutex);
do
{
fun();//this fun will cost a long time, maybe 1-2 second
gettimeofday(&now, NULL);
outtime.tv_sec = now.tv_sec + 5;
outtime.tv_nsec = now.tv_usec * 1000;
int ret = pthread_cond_timedwait(&cond, &mutex, &outtime);
} while((!predicate && ret != ETIMEDOUT)
pthread_mutex_unlock(&mutex);
==========================线程2
pthread_mutex_lock(&mutex);
predicate = true;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);
如果thread2在thread1的fun()期间发送信号,则没有pthread_cond_timedwait,当fun()调用返回时,thread1中的phread_cond_timedwait仍然可以得到thread2之前发送过的信号?我们可以在while()??
中的pthread_cond_timedwait之前调用一个耗时的乐趣答案 0 :(得分:1)
如果在没有线程等待信号时调用pthread_cond_signal
,则它无效。信号不会存储以备将来使用。
如果predicate
为真,则循环中的代码不应等待条件变量。