Multithreading 如何使用TestAndSet实现互斥锁(繁忙等待)?
我试图实现以下函数:lock(m)和unlock(m),其中m是一个布尔变量(互斥锁) 到目前为止,我已经实现了TestAndSet:Multithreading 如何使用TestAndSet实现互斥锁(繁忙等待)?,multithreading,operating-system,Multithreading,Operating System,我试图实现以下函数:lock(m)和unlock(m),其中m是一个布尔变量(互斥锁) 到目前为止,我已经实现了TestAndSet: function TestAndSet(boolean_ref lock) { boolean initial = lock; lock = true; return initial; } 我正在寻找一个伪代码解决方案。鉴于我的TestAndSet方法,我如何实现锁定和解锁?如果您可以忙着等待,锁定/解锁的代码可能是: lock(lock m):
function TestAndSet(boolean_ref lock) {
boolean initial = lock;
lock = true;
return initial;
}
我正在寻找一个伪代码解决方案。鉴于我的TestAndSet方法,我如何实现锁定和解锁?如果您可以忙着等待,锁定/解锁的代码可能是:
lock(lock m):
while (test_and_set(m))
;
unlock(lock m):
m = false;
您可以找到有关此主题的更多信息。如果您对繁忙的等待感到满意,则锁定/解锁代码可能是:
lock(lock m):
while (test_and_set(m))
;
unlock(lock m):
m = false;
您可以找到有关此主题的更多信息