[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 章 并发与同步。
转载请注明出处。