标签:知识点 其他 方法 下场 har 含义 机制 修改 ==
1. 在生产者和消费者问题中,mutex,empty,full信号量的作用是什么?如果将生产者和消费者问题中的两次wait操作和两次signal操作次序进行交换会产生什么问题?
解答:在生产者和消费者问题中,mutex信号量是互斥信号量,确保生产者和消费者对缓冲区资源的互斥访问。empty和full信号量是资源信号量,empty代表缓冲区中的空闲空间,full代表缓冲区中的产品数量,empty和full用来处理生产者和消费者之间的同步问题。
如果将生产者和消费者中的两次wait操作次序进行修改,则可能会发生死锁。可以考虑如下场景:缓冲区空间已满,这个时候生产者执行wait(mutex), wait(empty)操作尝试向缓冲区中放置产品,那么因为没有空闲资源该生产者进入等待状态。而其他的生产者和消费者在这个时候又无法获取mutex信号量使用临界区,此时就会发生死锁。如果将生产者和消费者的两次signal操作次序进行修改则不会发生死锁,只是资源的释放时机发生了改变。
2. p1, p2, p3 三个进程互斥使用一个包含N个单元的缓冲区。p1每次用使用produce()方法生成一个正整数并使用put()方法放入缓冲区中的一个空闲单元中。P2 每次用 getodd()从该缓冲区中取出一个奇数并用 countodd()统计奇数个数;P3 每次用 geteven()从该缓冲区中取出一个偶数并用 counteven()统计偶数个数。请用信号量 机制实现这三个进程的同步与互斥活动,并说明所定义的信号量的含义。要求用伪代码描述。
解答:缓冲区是一个互斥资源,因此设置信号量mutex。p1, p2, p3共享缓冲区,所以设置缓冲区共享信号量empty。p1, p2因为奇数放置和获取而同步,所以设置同步信号量odd。p1, p3因为偶数放置和获取而同步,所以放置同步信号量even。伪代码描述p1, p2, p3的同步问题如下所示:
semaphore mutex = 1; empty = N; odd = 0; even = 0;
P1:
while(true) { number = produce(); P(empty); P(mutex); put(); if(number % 2 == 0) { V(even); } else { V(odd); } }
P2:
while(true) { P(odd); P(mutex); getOdd();
V(mutex); V(empty); }
P3:
while(true) { P(even); P(mutex); getEven(); V(mutex); V(empty); }
标签:知识点 其他 方法 下场 har 含义 机制 修改 ==
原文地址:https://www.cnblogs.com/kaiblog/p/13084945.html