1. 哲学家就餐问题
资源:5个筷子
进程:5个哲学家
进程使用资源的方式:每个哲学家在吃饭时要用2个筷子,吃饭结束后放下
怎样同步:
A 设置一个资源为4的房间信号量,即每次只允许4个哲学家进入房间
B 设置要求:一个哲学家要么不拿筷子,要么两根筷子都拿起来,则只有在判断两边没有吃饭的时候自己才吃
2. 读者写者问题
资源:一个文件
进程:多个读者进程和多个写者进程
进程使用资源的方式:读者进程可以同时访问文件,写者进程只能单独访问文件(不能有其他读或者写)
怎样同步:
A 读者优先:除了第一个读者要验证是否有写者,其他读者直接进来就可以;所有读者都进完了再唤醒写者;
B 写者优先:直接修改读者的代码;这时要排两队,信号量1的队:给不是第一个的读者排的队,如果第一个读者没能读,那么他们进2队的机会都没有;信号量2的队:给第一个写者和第一个读者准备的队;不是第一个写者根本不用排队,直接进入文件临界区;
3. 消费者问题
资源:有限数目的消费(生产)空间;一个能生产或者消费的区域;
进程:多个消费者和多个生产者
进程使用资源的方式:消费者只有当有产品的时候才消费,生产者只有当有空间的时候才生产;消费者消费后空间增大,生产者生产后产品增多;区域一次只进一个人
怎样同步:
A 消费者根据产品数目排队,生产者根据空间排队;每次完成之后增加空间/产品
代码参考:
https://www.cnblogs.com/sinkinben/p/10713536.html