TestandSet()
是一个原子操作如下:
boolean TestandSet(boolean *target)
{
boolean prev = *target;
*target = true; // always set true
return prev; // return previous value
}
TestandSet()
可用于实现互斥,如下所示:
do {
while (TestandSet(&lock))
; /* loop and wait */
// critical section
lock = false;
// remainder section
}
Q1:我如何在上面的代码中指出输入部分和退出部分
Q2问题是假设有两个进程P1和P2执行上述代码,P1稍微超前于P2。假设锁定被启动为false。根据下表,给出P1和P2的执行痕迹。