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