std::atomic<bool> test = false;
int v;
线程1
while(true)
{
if (!test)
{
v = GetV();
test = true;
}
}
线程2
while(true)
{
if(test)
{
UseV(v);
test = false;
}
}
修改了一下,这样能解决乱序的问题吗。
【 在 foliver 的大作中提到: 】
: 当然有问题。
: 首先test应该声明为voilate。然后由于指令重排和乱序,test的赋值可能会被提前执行。
: 如果你想写无锁代码,先理解一下什么是memory fence,以及在C++11中如何实现。
: ...................
--
FROM 36.113.96.*