[2][34][多选]关于读者写者问题,下列叙述中哪些是错误的
reader() { while (TRUE) { P(mutex); rc = rc + 1; if (rc == 1) P(w); V(mutex); ① 读操作; P(mutex); ② rc = rc - 1; if (rc == 0) V(w); V(mutex); 其他操作; } } writer() { while (TRUE) { P(w); 写操作; V(w); } }
信号量w的初值是0
信号量mutex的初值是1
计数器rc的初值是0
语句P(mutex的位置可以放到语句rc = rc + 1后面
语句①②可以取消
答案
信号量w的初值是0
语句P(mutex的位置可以放到语句rc = rc + 1后面
语句①②可以取消
解析
1. 信号量w是为了互斥访问写操作,初始值应为1。因为写操作是互斥的,同一时间只能有一个写操作进行,当有写操作时,需要将w信号量减1,使其变为0,阻止其他写操作进入,当写操作完成后,将w信号量加1,允许其他写操作进行。
2. P (mutex 是为了互斥访问rc这一临界资源,不能随意更改执行顺序。rc用于记录正在进行读操作的读者数量,通过mutex信号量来保证对rc的操作是原子性的,即不会被其他进程或线程打断。
3. 语句①②的存在使得多个reader可以同时访问,不能取消。这部分代码实现了读写互斥和多读互斥的功能。当第一个读者进入时,通过P (w操作来阻止写操作,当最后一个读者离开时,通过V (w操作来允许写操作,保证了读写之间的正确同步。故本题答案选择ADE选项。
【涉及考点】
第4章 并发与同步
转载请注明出处。