目录
问题程序
今天无意中看到一篇帖子,关于条件变量的,不过仔细看看发现它并达不到原本的目的。
程序如下,读者可以先想想他的本意,以及有没有问题:
#include <iostream>
#include <thread>
#include <condition_variable>
#include <mutex>
#include <unistd.h>
using namespace std;
//全局条件变量
condition_variable cond;
mutex _mutex;
int count = 0;
void fun1(){
while(1)
{
count++;
unique_lock<mutex>lock(_mutex);
if(count%5 == 0)
{
cond.notify_one();
}
else
{
cout<<"this is fun1,count="<<count<<endl;
}
lock.unlock();
文章讨论了一个关于条件变量在多线程程序中的问题,当移除sleep时,程序的行为发生变化,揭示了条件变量的通知机制并不足以保证任务串行执行。作者提供了正确的修改方法,强调了条件变量与锁、flag变量的配合使用,并给出了测试多线程程序的有效策略。
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



