欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

利用记录型信号量机制: wait(s), signal(s)解决进程同步问题

发布时间:2024/8/26 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 利用记录型信号量机制: wait(s), signal(s)解决进程同步问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

wait(s) 等价与P操作, signal(s)等价于V操作

生产者-消费者问题

int in = 0, out = 0; item buffer[n]; semaphore mutex = 1, empty = n, full = 0; void procuder() {do {procuder an item nextp;...wait(empty);//表示空缓冲区-1;wait(mutex);//数据缓冲区互斥访问,关闭访问;buffer[in] = nextp;in = (in+1) % n;signal(mutex);//打开访问signal(full);//满缓冲区加+1} while (true); }void consumer() {do {wait(full);//判断是否有满缓冲区,满缓冲区-1wait(mutex);nextc = buffer[out];out = (out+1) % n;signal(mutex);siganl(empty);//空缓冲区+1consumer the item in nextc;....} while (true); }void main() {cobeginproducer(); consumer();coend }

爸爸妈妈洗水果,儿子女儿吃水果问题

问题描述:爸爸专向盘中放苹果,妈妈专向盘中放橘子,儿子专等吃盘里的橘子,女儿专等吃盘里的苹果。只要盘子空,爸爸妈妈可向盘中放水果,仅当盘中有自己需要的水果时,儿子或女儿可从中取出,请给出他们四人之间的同步关系,并用PV操作实现四人正确活动的程序。。使用p、v操作来完成父亲、妈妈、儿子、女儿的同步行为模拟。

semaphore putmutex = 1, getmutex = 0; semaphore empty = 1, apple = 0, orange = 0; void father() {do {wait(putmutex);apple++;empty--;signal(putmutex);} while (true); } void mother() {do {wait(putmutex);orange++;empty--;signal(putmutex);} while (true); } void son() {do {wait(getmutex);orange--;empty++;signal(getmutex);} while (true); } void daughter() {do {wait(getmutex);apple--;empty++;signal(getmutex);} while (true); } void main() {cobeginfather(); mother(); son(); daughter();coend }

此外 ,可参考java的实现:http://www.cnblogs.com/zyp4614/p/6555530.html

司机,售票员问题

问题:
司机开车,售票员售票。当售票员将门关上的时候司机才可以开车,当司机将车到站停下的时候,售票员才可以打开车门。

对S1(门): 门有两个状态,开和关。售票员将门关上之后,应该将门的操作权给司机(因为只有司机到站了才能停车)。因此0为门开着状态。
对S2(车):两个状态,开车行驶和到站停车。当车开的时候,需要申请车的资源,即用wait,则车在停着的时候状态为1,行驶时状态为0.
司机:开车,正常行驶,到站停车
售票员:关门,售票,开门

S1表示是否允许司机启动汽车;S1 = 1表示可以启动,S2 = 0表示不能启动。
S2表示是否允许售票员关车门;S2 = 1表示允许售票员关车门,S2 = 0表示不允许售票员关车门。

semaphore s1 = 1, s2 = 0; void driver() {do {wait(s1);// P(S1)开车;正常行驶;到站停车;signal(s2);//V(S2)} while (true); } void seller() {do {关门;signal(s1);// V(S1)售票;wait(S2);//P(S2)开车门;上下乘客;} while (true); } void main() {cobegindriver(); seller();coend }

可参考博客: http://m.blog.csdn.net/Y_215/article/details/53467517

转载于:https://www.cnblogs.com/ToBeOrNotToBe/p/7125010.html

总结

以上是生活随笔为你收集整理的利用记录型信号量机制: wait(s), signal(s)解决进程同步问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。