点击打开链接http://www.cnblogs.com/inevermore/p/4009719.html
这里引用一个很好的生产者-消费者案例:具体思路参见链接
生产者往缓冲区中放入产品、消费者取走产品。生产者和消费者指的可以是线程也可以是进程。
生产者消费者问题的难点在于:
为了缓冲区数据的安全性,一次只允许一个线程进入缓冲区,它就是所谓的临界资源。
生产者往缓冲区放物品时,如果缓冲区已满,那么需要等待,一直到消费者取走产品为止。
消费者取走产品时,如果没有物品,需要等待,一直到有生产者放入为止。
第一个问题属于互斥问题,我们需要使用一把互斥锁,来实现对缓冲区的安全访问。
后两个属于同步问题,两类线程相互协作,需要两个条件变量,一个用于通知生产者放入产品,一个用来通知消费者取走物品。
生产者线程的大概流程是:
1.加锁
2.如果缓冲区已满,则等待。
3.放入物品
4.解锁
5.通知消费者,可以取走产品
消费者的逻辑恰好相反:
1.加锁
2.缓冲区为空,等待
3.取走物品
4.解锁
5.通知生产者,可以放入物品