AND型信号量集
V(S1, S2, …, Sn){
for (i=1; i<=n; i++) {
Si++ ;
Remove all the thread waiting in the queue associated with Si into
the ready queue
}
}
方案5不仅没有死锁,而且对于任意位哲学家的情况都能获得最大的并行度。算法中使用一个数组state
跟踪每一个哲学家是在进餐、思考还是饥饿状态(正在试图拿叉子)。一个哲学家只有在两个邻居都没有进餐时才允许进入到进餐状态。
每个线程将函数philosopher
作为主代码运行,而其他函数take_forks
、put_forks
和test
只是普通的函数,而非单独的线程。
用信号量描述每个约束
此实现中,读者优先
https://blog.csdn.net/weixin_43237362/article/details/104712647 AND型信号量
https://blog.csdn.net/weixin_43237362/article/details/104712647 AND型信号量
https://blog.csdn.net/weixin_43237362/article/details/104712647 AND型信号量