0

我无法理解 test_and_set,所以我想确保我正确解析了算法。

do { while (test_and_set(&lock))
; /* do nothing */
/* critical section */
lock = false;
/* remainder section */
} while (true);



boolean test_and_set (boolean *target)
{
boolean rv = *target;
*target = TRUE;
return rv:
}

第一种:lock 被初始化为 false,test_and_set 返回 false 但将 lock 更改为 true;因此,第二个什么都不做:lock 设置为 true,test_and_set 返回 true 并将 lock 更改为 true;因此,临界区运行,锁定设置为假。

冲洗并重复

4

1 回答 1

0

第一种:lock 被初始化为 false,test_and_set 返回 false 但将 lock 更改为 true;因此,什么也不做

否,test_and_set返回 false,所以退出 while 循环并执行临界区

lock 设置为 true 以防止其他进程在test_and_set执行关键部分时出现错误。

于 2014-09-22T12:00:51.697 回答