2017-04-19 84 views
0

我想實現以下功能:鎖定(m)和解鎖(m),其中m是一個布爾變量(互斥鎖)。如何使用TestAndSet實現互斥鎖(忙於等待)?

到目前爲止,我有檢查並設置執行:

function TestAndSet(boolean_ref lock) { 
    boolean initial = lock; 
    lock = true; 
    return initial; 
} 

我正在尋找一個僞解決方案。我如何在給定TestAndSet方法的情況下實現鎖定和解鎖?

回答

2

如果你用好忙等待,鎖定/解鎖代碼可以是:

lock(lock m): 
    while (test_and_set(m)) 
    ; 


unlock(lock m): 
    m = false; 

你可以找到更多關於這個話題here