考虑这个可能的实现同步机制的,目的是只有一个线程是在临界段(CS)在时间:如果(锁定)等待其他锁= 1把CS锁= 0
if (lock)
wait
else
lock=1
CS
lock=0
这是否适用于多处理器系统?
考虑这个可能的实现同步机制的,目的是只有一个线程是在临界段(CS)在时间:如果(锁定)等待其他锁= 1把CS锁= 0
if (lock)
wait
else
lock=1
CS
lock=0
这是否适用于多处理器系统?
不会。这不适用于单处理器系统。假设你有两个线程这样做。他们可以这样安排:
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-21 10:21:11
@ H2CO3语境容易推断,如果你知道的问题,虽然。我已经编辑它。 – Gilles