我无法理解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:
}
1st:lock初始化为false,test_and_set返回false但将lock更改为true;因此,什么都不做 2nd:lock设置为true,test_and_set返回true并将lock更改为true;因此,关键部分运行,锁定设置为false。
冲洗并重复
答案 0 :(得分:0)
1st:lock初始化为false,test_and_set返回false但将lock更改为true;因此,什么都不做
不,test_and_set
返回false,因此退出while循环并执行关键部分
lock设置为true以防止其他进程在关键部分执行时从test_and_set
变为false。