Appearance
题目
下表给出了整型信号量 S 的 wait() 和 signal() 操作的功能描述,以及采用开/关中断指令实现信号量操作互斥的两种方法。
功能描述
c
Semaphore S;
wait(S) {
while (S <= 0);
S = S - 1;
}
signal(S) {
S = S + 1;
}方法 1
c
wait(S) {
关中断;
while (S <= 0);
S = S - 1;
开中断;
}
signal(S) {
关中断;
S = S + 1;
开中断;
}方法 2
c
wait(S) {
关中断;
while (S <= 0) {
开中断;
关中断;
}
S = S - 1;
开中断;
}
signal(S) {
关中断;
S = S + 1;
开中断;
}请回答下列问题:
(1) 为什么在 wait() 和 signal() 操作中对信号量 S 的访问必须互斥执行?
(2) 分别说明方法 1 和方法 2 是否正确。若不正确,请说明理由。
(3) 用户程序能否使用开/关中断指令实现临界区互斥?为什么?