(7分)采用swap 指今实现进程互斥。lock为TR
(7分)采用swap 指今实现进程互斥。lock为TRUE时,不可进入临界区; lock 为FALSE 时,可以进入临界区。某学生写的代码如下:
bool lock = FAlSE;//共享变量 ...... // 进入区 bool key = TRUE; if (key == TRUE) swap (key,lock); // 临界区 ...... // 退出区 lock=TRUE; ......
newSwap (boola, bool *b){
bool temp =*a;
*a=*b;
*b=temp;
}(1)请修改代码,正确实现互斥(不增加语句条数)
(2)是否可以用函数newSwap(&a&b)代替swap 指令?为什么?
答案
(1)修改进入区代码: if (key == TRUE) 改为 while (key == TRUE)(2分)
修改退出区代码:lock=TRUE; 改为 lock=FALSE;(2分)
(2)不可以代替swap指令。(1分)
因为 newSwap函数的执行不具备原子性,执行newSwap 的过程中,可能会切换为其他线程,从而导致无法正确实现线程互斥。(2分)