日期:2014-05-16  浏览次数:20566 次

生产者消费者问题为什么不可以共用一个信号量,如果这个信号量可以设置取值固定为0到N,即当信号量取值为N的时候阻塞进程,是否也可以?
是不是硬件原因?历史原因?

------解决方案--------------------
>当信号量取值为N的时候阻塞进程
所以你想怎么做到这点?直接说这个信号量能满足这个条件,那这个就不叫信号量了。你要是自己手工写一个if(semaphore==N) sleep();,那是达不到要求的。
------解决方案--------------------
生产消费者就两种做法:

1, 两个信号量 + 1个互斥量(如果信号量初始值>1的话,需要互斥量同步并发访问)
2, 1个条件变量 + 1个当前使用的容量变量 + 1个最大容量变量。