我在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作为标志有什么问题吗?