操作系统
2023-45
现要求学生使用 swap 指令和布尔型变量 lock 实现临界区互斥。lock 为线程间共享的变量,lock 的值为 TRUE 时线程不能进入临界区,为 FALSE 时线程能够进入临界区。某同学编写的实现临界区互斥的伪代码如题 45(a)图所示。

请回答下列问题。
1)题 45(a) 图的伪代码中哪些语句存在错误?将其改为正确的语句(不增加语句的条数)。
2)题 45(b) 图给出了交换两个变量值的函数 newSwap() 的代码。是否可以用函数调用语句 newSwap(&key, &lock) 代替指令 swap key, lock,以实现临界区互斥?为什么?
答案
(1)进入区中的
if (key == TRUE)
swap key, lock;应改为
while (key == TRUE)
swap key, lock;退出区的 lock = TRUE; 应改为 lock = FALSE;。
(2)不能用 newSwap(&key, &lock) 代替 swap key, lock。普通函数中的多个读写操作不是原子操作,多线程并发执行时可能交叉进行,不能保证临界区互斥。