我无法理解 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;因此,临界区运行,锁定设置为假。
冲洗并重复