gpt4 book ai didi

c++ - 如果 pthread_cond_wait 在 pthread_cond_signal 信号之前丢失信号

转载 作者:行者123 更新时间:2023-11-28 07:27:17 26 4
gpt4 key购买 nike

================thread1

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);

==========================thread2

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之前调用一个耗时的fun吗??

最佳答案

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

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

关于c++ - 如果 pthread_cond_wait 在 pthread_cond_signal 信号之前丢失信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18536496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com