[1][34][多选]在有 N 个缓冲区的生产者 - 消费者问题中,下列叙述中哪些是错误的
producer() { int item; while (TRUE) { item = produce_item(); P(empty); P(mutex); insert_item(item); V(mutex); V(full); } } consumer() { int item; while (TRUE) { P(full); P(mutex); item = remove_item(); V(mutex); V(empty); consume_item(item); } }
信号量 empty 的初始值为 N
信号量 full 的初始值为 0
信号量 mutex 的初始值为 0
P(full)和 P(mutex)两条语句可以颠倒顺序
V(full)和 V(mutex)两条语句可以颠倒顺序
答案
信号量 mutex 的初始值为 0
P(full)和 P(mutex)两条语句可以颠倒顺序
解析
empty 信号量是表示的是空缓冲区数目,这里为 N,所以其初始值为 N;full 信号量是表示的是满缓冲区数目,这里为 0,即其初始值为 0;mutex 信号量是用于实现互斥访问,初始值为 1。P(full和 P(mutex两条语句若颠倒顺序,可能导致死锁;V(full和 V(mutex两条语句若颠倒顺序,可能导致错误。故本题答案选 CD。涉及考点为第 4 章 并发与同步。
转载请注明出处。