(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分)

题目信息

题号:6897
题型:简答题
知识点:408考研
难度:普通