如何使用TestAndSet实现互斥锁(忙碌等待)?

时间:2017-04-19 11:36:39

标签: multithreading operating-system

我正在尝试实现以下功能:lock(m)和unlock(m),其中m是一个布尔变量(互斥锁)。

到目前为止,我有TestAndSet的实现:

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

我正在寻找一种伪代码解决方案。因此,如何根据我的TestAndSet方法实现锁定和解锁?

1 个答案:

答案 0 :(得分:2)

如果你可以忙着等待,锁定/解锁的代码可能是:

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


unlock(lock m):
  m = false;

您可以在here上找到有关此主题的更多信息。