Skip to content

2023年 408 操作系统 第 45 题

操作系统2023年综合题7分

题目 ​

现要求学生使用 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 以实现临界区的互斥?为什么?

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题