Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 如何使用TestAndSet实现互斥锁(繁忙等待)?_Multithreading_Operating System - Fatal编程技术网

Multithreading 如何使用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):

我试图实现以下函数:lock(m)和unlock(m),其中m是一个布尔变量(互斥锁)

到目前为止,我已经实现了TestAndSet:

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;
您可以找到有关此主题的更多信息