Lock-free编程简介-思考题参考

下面有一个简单的例子,这段代码不持有互斥量,但它也不是lock-free的。

一开始X=0。、如何调度两个执行下面代码的线程,让他们都不能退出循环。

while (X == 0)  //a
{
    X = 1 - X;  //b
}

两个线程记为A、B。线程A执行代码行a记为Aa,其他类似。

如下调度顺序可保证A、B都无法退出循环

Aa  //x==0

Ba  //x==0

Ab  //x==1

Bb  //x==0

Aa  //x==0

Ba  //x==0

Ab  //x==1

Bb  //x==0

......

每四行一组,一组内的1、2行,3、4行可交换随意交换顺序。

posted @ 2019-01-05 23:46  hujichen  阅读(37)  评论(0)    收藏  举报