需要用条件变量保护原子旗吗?

时间:2015-10-10 15:36:43

标签: c++ atomic condition-variable

我在VS2013上写了一些代码,比如

std::atomic<size_t> count = 0;
std::mutex sync;
std::condition_variable cv;
void thread1()
{
    count++;
    task();
    count--;
    std::unique_lock<std::mutex> lock(sync);
    cv.notify_one();
}
void thread2()
{
     std::unique_lock<std::mutex> lock(sync);
     cv.wait(lock, [this](){return count == 0; });
}

但该代码不会一直等待

cv.wait(lock, [this](){return count == 0; });

如果我更改代码(删除原子标记并添加互斥锁),一切运行良好:

size_t count = 0;
boost::mutex sync;
boost::condition_variable cv;
void thread1()
{
    std::unique_lock<std::mutex> lock(sync);
    count++;
    task();
    count--;
    cv.notify_one();
}
void thread2()
{
     std::unique_lock<std::mutex> lock(sync);
     cv.wait(lock, [this](){return count == 0; });
}

使用std :: atomic作为标志有什么问题吗?

0 个答案:

没有答案