生产者-消费者
系统中有一组生产者进程和一组消费者进程
两者共享一个初始为空,大小为n的缓冲区
缓冲区没满,生产者才能放入
缓冲区没空,消费者才能取出
互斥地访问缓冲区
互斥要在同步之后,不然会导致想要同步,但由于没有锁而导致死锁
遵循先V后P
多生产者-多消费者
多对多需要清楚互斥量是否为1,若为1可能可以不加互斥,若不为1则需要加,因为要避免覆写缓冲区,导致数据错误
同步需要梳理好前后关系,例如这里的盘子和水果
读者-写者
当有读者和写者两组并发进程,共享一个文件,读时只允许读,不允许写,写时不允许读和写
难点在怎么确定当前访问的进程是哪种进程
此处将互斥量套在检查count和赋值count上,但造成了读优先,且写饥饿
为了解决写饥饿,加入对写标志的同步操作,即当有写进程申请访问时,读文件进程只能等待,读写平衡法
吸烟者
三个抽烟者各自持有三种材料中的一种,一个供货商每次提供两种材料,抽烟者一凑齐材料就能抽,此处就涉及了线程同步问题
其实这里finish用做表示抽完才能放材料,设置三种材料作为变量即可
哲学家进餐
这里就不能常规的p操作检查两边的筷子能否拿起,因为同时并发会导致都吃不上饭
要想实现不死锁,需要让他们按一定顺序吃饭,如只有能拿起一双筷子的才能吃饭,不然就不能拿筷子