Appearance
题目
现要求学生使用 swap 指令和布尔型变量 lock 实现临界区互斥。lock 为线程间共享的变量:值为 TRUE 时线程不能进入临界区,值为 FALSE 时线程能够进入临界区。
某同学编写的实现临界区互斥的伪代码如题 45(a) 图所示:
c
bool lock = FALSE; // 共享变量
...
// ── 进入区 ──
bool key = TRUE;
if (key == TRUE)
swap key, lock; // 原子交换 key 和 lock 的值
// ── 临界区 ──
临界区;
// ── 退出区 ──
lock = TRUE;
...题 45(b) 图给出了"两个变量值的函数 newSwap()"代码:
c
void newSwap(bool *a, bool *b)
{
bool temp = *a;
*a = *b;
*b = temp;
}(1) 题 45(a) 图中伪代码中哪些语句存在错误?将其改为正确的语句(不增加语句条数)。
(2) 题 45(b) 图中给出的两个变量值的函数 newSwap() 的代码是否可以用函数调用语句 newSwap(&key, &lock) 代替指令 swap key, lock 以实现临界区的互斥?为什么?