2

考虑这种同步机制的可能实现,目标是一次只有一个线程位于临界区 (CS) 中:

if (lock)
      wait
else
     lock=1
      CS
     lock=0

这适用于多处理器系统吗?

4

1 回答 1

4

不,这甚至不适用于单处理器系统。假设您有两个线程在执行此操作。他们可以这样安排:

thread1                     thread2
if (lock) /*false*/
                            if (lock) /*false*/
                            lock=1
lock=1
/*CS*/
                            /*CS*/
/*CS continues*/
                            /*CS continues*/
                            lock=0
lock=0

您不能以这种方式实现锁定。实现锁的方法之一是使用处理器指令自动检查变量的当前值分配给它,例如test-and-set。(还有很多其他可能的方法,不同的CPU提供不同的方法,有时不止一种。)

于 2013-09-21T12:05:40.250 回答