如果pthread_cond_wait可以在pthread-cond_signal信号之前丢失信号

if pthread_cond_wait can loss signal when pthread_cond_signal signal before it

本文关键字:信号 signal pthread-cond cond pthread wait 如果      更新时间:2023-10-16

===============线程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(?我们能在while()中调用pthread_cond_timedwait之前的一个耗时的fun吗??

如果在没有线程等待信号时调用pthread_cond_signal,则没有任何效果。该信号不会存储以备将来使用。

如果predicate为true,则循环中的代码不应等待条件变量。