计算进程和打印进程围绕共同的缓冲区会发⽣什么
计算机进程和打印机进程共同使⽤⼀个同⼀缓冲区Buf。计算进程反复地把每次计算结果放⼊Buf中,⽽打印进程则把计算进程每次放⼊Buf 中的数据通过打印机打印输出。
如果不采⽤任何制约措施这两个进程的执⾏起始时间和执⾏速度都是彼此独⽴的。假设进程Pc和Pp对公⽤缓冲池Buf已经采取了互斥措施,其相应的控制可以描述如下:
Pc:
A:local Buffer
小资男repeat
脾气不好的女人Buffer <- Buf
until Buf=空
计算
得到计算结果
Buf <- 计算结果
goto A
Pp:
B:local Pri
repeat
Pri <- Buf
until Pri ≠空
打印Buf中的数据
清除Buf中的数据
谁人不识君goto B
如果以上描述⽅式来并发执⾏进程Pc和Pp,则会造成CPU时间的极⼤浪费,因为其中包含两处测试语感谢老板的话
句。⽽操作系统设计要求是不允许的。CPU时间的浪费主要是由于进程Pc和Pp的执⾏相互制约所引起的。Pc的输出结果是Pp的执⾏条件,Pp的执⾏结果是Pc的执⾏条件。
进程间的同步:是指异步环境下的⼀组进程因直接制约⽽互相发送消息⽽进⾏互相合作、互相等待,使得各进程按⼀定的速度执⾏的过程。具有同步关系的⼀组并发进程称为合作进程,合作进程间互相发送的信号称为消息或事件。如果对某⼀个消息或事件赋予唯⼀的消息名,则可:
宝宝消化不良症状wait(消息名) 表⽰进程等待合作进程发来消息
signal(消息名) 表⽰向合作进程发送消息
利⽤wait和signal,简单描述计算进程Pc和打印进程Pp的同步关系如下:
Pc:
A:wait(Bufempty)
计算
应聘书格式及范文
Buf <- 计算结果
Bufempty <-fal
猫咪呕吐
signal(Buffull)
goto A
Pp:
B:wait(Buffull)
打印Buf中的数据
清除Buf中的数据
Buffull <- fal一篇征文
signal(Bufempty)
goto B
过程wait的功能是等待到消息名为true的进程继续执⾏;
Signal的功能是向合作进程发送合作进程所需要的消息名,将其值置为true。