信号量调度共享资源

生产者消费者问题

生产者和消费者共享一个有限的缓冲区。生产者反复的产生项目并把它们加入到槽中去。而消费者消费项目,从槽中移除项目。这里生成者和消费者可以有任意多个,可以假想成一个个线程。每一个线程是一个生产者或者消费者。可以使用一个数据结构来存放槽数据和信号量。

生产者 生产的过程中先等待可以使用的空槽,然后互斥所加锁,对空槽进行赋值,互斥所解锁,然后告诉有新的项目可以用(如果有线程因为等待可以消耗的项目而挂起,这个信号可以重启该线程)。

消费者 消费的过程中先等待可以消耗的项目,然后互斥所加锁,移除空槽(共享变量),互斥锁解锁,然后告诉有新的空槽可以使用。

原文地址:https://www.cnblogs.com/Nastukashii/p/4751251.html