您的位置:首页 > 其它

生产者-消费者 领导者-追随者 半同步-半异步

2014-09-21 23:06 246 查看
都是概念问题,实现并不是什么难事,网上示例一搜一大堆。

一、

生产者-消费者模型

http://baike.baidu.com/view/10800629.htm?fr=aladdin

生产者消费者问题(英语:Producer-consumer problem),

也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。

该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。生产者的主要作用是生成一定量的数据放到缓冲区中,然后重复此过程。与此同时,消费者也在缓冲区消耗这些数据。该问题的关键就是要保证生产者不会在缓冲区满时加入数据,消费者也不会在缓冲区中空时消耗数据。

问题升级:多个生产者-多个消费者

二、

领导者-追随者模型

http://www.cppblog.com/liangairan/articles/62917.html?opt=admin

打比方:

1. 话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。

2. 一般就是有一个山贼在山路口察看,其他人在林子里面睡觉。

3. 假如发现有落单的过往客商,望风的山贼就会弄醒一个睡觉的山贼,然后自己去打劫。

4. 醒来的山贼接替作望风的事情。

5. 打劫的山贼搞定以后,就会去睡觉,直到被其他望风的山贼叫醒来望风为止。

6. 有时候过往客商太多,而山贼数量不够,有些客商就能侥幸平安通过山岭(所有山贼都去打劫其他客商了)。

计算机版本

1. 有若干个线程(一般组成线程池)用来处理大量的事件

2. 有一个线程作为领导者,等待事件的发生;其他的线程作为追随者,仅仅是睡眠。

3. 假如有事件需要处理,领导者会从追随者中指定一个新的领导者,自己去处理事件。

4. 唤醒的追随者作为新的领导者等待事件的发生。

5. 处理事件的线程处理完毕以后,就会成为追随者的一员,直到被唤醒成为领导者。

6. 假如需要处理的事件太多,而线程数量不够(能够动态创建线程处理另当别论),则有的事件可能会得不到处理。

三、

半同步-半异步模型

http://www.cppblog.com/liangairan/articles/62917.html?opt=admin

1. 话说一个地方有一群有组织无纪律的人从事山贼这个很有前途的职业。

2. 他们有一个山贼头头,他专门负责望风,其他的喽罗待命。

3. 假如发现有落单的过往客商,山贼头头会到路口拦路,让客商双手抱头蹲在地上,然后让一个小喽罗为这个倒霉鬼"服务"。

4. 假如客商很多,山贼头头会让客商在地上蹲成一排(严肃点,排队啦,打劫啦)。 一群小喽罗挨个为大家"服务"。

5. 头头的工作很重要,对于每个客商他都不会花费太多时间,拦路以后,他会让客商排队等待打劫。

6. 过往客商太多而山贼数量不够,客商的排队可能需要等待较长的时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐