五个经典视点操作问题(附答案)
三个进程之间的同步
视点操作经典习题
视点操作题型整理
生产者和消费者生产者消费者问题
当只有一个生产者和消费者时,以及当只有一个缓冲区时
要考虑生产者和消费者两个过程的互斥,还有生产者和消费者过程执行动作的优先顺序。
当只有一个生产者和一个消费者时,有n个缓冲区
当有k个生产者和m个消费者时,有缓冲区
当有k个生产者和m个消费者时,有n个缓冲区
必须考虑生产者之间的互斥、消费者之间的互斥。
一个箱子里,混着同等数量的黑白围棋棋子。 目前,自动分选系统划分黑子、asjdjj,分选系统有两个流程P1、P2,其中P1分选asjdjj; 选择P2黑子。
注意:
决定每一个进程一个拾取,如果一个进程正在拾取,则不允许另一个进程拾取。
当一个过程选择一个人时,必须让另一个过程去栋。
尝试写出两个进程P1和P2可以同时正确执行的程序。
分析:这是一个有序进行的过程,是同步关系。 需要设置两个信号量s1、s2来协调他们的活动。
设s1=1; s2=0;
void white () (while ) ) true ) ) wait ) S1;//选择asjdjsignal (s2); //向机器发送应该选择黑子的消息}}void black () (while ) true ) ) wait ) S2 ); //拾取黑子signal (S1 ); //向机器发送消息说应该选择asjdjj )的参观室,共有100个座位。 读者进入时必须先登记一种登记表。 此表为每个座位(包括座位号和读者姓名)列出一个条目。 读者离开时应当注销登记内容。 试着用wait和signal原语来说明读者的过程同步问题吧。
semaphore empty=100; 记录//空位semaphore mutex=1注册和取消注册为互斥访问操作void reader () (while ) ) wait ) empty ); wait (最大; 注册//signal(mutex )//readwait(mutex );//注销//signal(mutex )的signal(empty ); 和尚打水
和尚打水的感想:首先,要明白有几个流程班,正题一定是mldzc和魅力之星。 然后,了解每个进程类是只有一个进程还是多个进程。 正题是一定有多个mldzc和多个迷人的星星。
mldzc把水举起来喂给有魅力的星球。 坛子里可以装10桶水,类似于生产者-消费者的问题。
井很窄,只能一个人使用。 表示一次只有一个mldzc在打水。
在mldzc这个过程中设定初始值1的信号量。
色星从水箱打水,mldzc向水箱灌水是排他性的事件
mldzc,在有魅力的星球过程中必须设定初始值1的信号量。
桶的数量只有3个,mldzc和魅力星球的过程数加起来最多只有3个运转。 mldzc,在有魅力的星球过程中必须设定初始值3的信号量。
思考
)只在mldzc这个过程中设定初始值1的信号量。 (同种过程设定信号量) ) )。
) mldzc,在迷人的星球过程中设定初始值1的信号量。 (按进程设定信号量)
) mldzc,在迷人的星球过程中设定初始值3的信号量。 按类进程设置信号的大小为n,表示按类进程的数量最多为n个。)
这三个信号量对过程的互斥作用。
读者-写作者问题
请用信号量解决以下“过独木桥”问题。 同一个方向的行人可以连续过桥,如果有人在一个方向过桥,另一个方向的行人必须等待。 一个方向没有人过桥时,另一个方向的行人可以过桥。
独木桥的两个方向分别标记为a和b; 用整形变量countA和countB分别表示在a、b方向已经在独木桥的人数,初始值为0; 然后,设定3个初始值为1的排他信号量。 SA用于实现对countA的独占访问,SB用于实现对countB的独占访问,mutex用于实现双向行人对独木桥的独占使用。 具体记述如下
Var SA,SB,mutex : semaphore :=1,1,1; CountA,countb : integer :=0,0: beginparbeginprocessa 3360 begin wait (sa; if(counta=0) thenwait ) mutex; countA:=countA 1; signal(sa; 过独木桥; wait(sa; countA:=countA-1; if(counta=0) thensignal ) mutex; signa(sa; endprocessb:Beginwait(sb; if(countb=0) thenwait ) mutex; countB:=countB 1; signal(sb; 过独木桥; wit(sb ); countB:=countB-1; if(countb=0) thensignal ) mutex; signa(sb; endparendend理发师问题