考慮這個可能的實現同步機制的,目的是隻有一個線程是在臨界段(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