gpt4 book ai didi

c++ - pthread_cond_wait() 之前的检查标志

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:35 25 4
gpt4 key购买 nike

bool flag=false;
pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond=PTHREAD_COND_INITIALIZER;

void function1()
{
pthread_mutex_lock(&mutex);
while(!flag)
{
//#2
pthread_cond_wait(&cond,&mutex);
}
pthread_mutex_unlock(&mutex);
}

void function2()
{
flag=true;
pthread_cond_signal(&cond);
}

情况是这样的。两个线程thread1和thread2分别运行在function1和function2上。

由于 CPU 调度,线程 1 在 #2 处停止。

thread2 开始执行并将标志更改为 true。

线程 1 开始等待,但它会永远等待。

当我想在不锁定互斥量的情况下通知其他线程时如何避免这种情况。

最佳答案

这就是为什么在更新谓词 (flag) 时必须锁定互斥量的原因。别无选择。

pthread_mutex_lock(&mutex);
flag = true;
pthread_cond_signal(&cond);
pthread_mutex_unlock(&mutex);

(如果需要,您可以将 pthread_cond_signal() 移到 pthread_mutex_unlock() 之后)。

关于c++ - pthread_cond_wait() 之前的检查标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17984737/

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