【每日阅读】2020年12月21日-管程——互斥、同步的通用解决方案

如何实现互斥

想要实现互斥,那么就利用管程的入口等待队列,控制一次只能有一个线程进入。

【每日阅读】2020年12月21日-管程——互斥、同步的通用解决方案

如何实现同步

那么就可以利用管程内部的条件变量等待队列,每个需要满足的条件对应一个等待队列,例如“如果A为true”是一个条件,他的条件等待队列为A,所有关注这个条件的线程在条件未满足时放入等待队列中,当条件满足时通知等待队列内的所有线程(notifyAll)或单个线程(notify)。等待通过wait触发。

总结

这种思想在很多语言中都有对应实现,Java中的synchronized、wait、notify、notifyAll就是一种。还有并发包内的各种锁的实现,都是管程。区别是并发包内的实现在单一管程内部支持多个条件变量。而synchronized只支持单一条件变量(也就是synchronized加锁的对象)。

原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2752

(0)
geekgaogeekgao博主
上一篇 2020年12月17日
下一篇 2020年12月23日

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

GitHub
分享本页
返回顶部

Warning: error_log(/usr/local/lighthouse/softwares/wordpress/wp-content/plugins/spider-analyser/#log/log-2723.txt): failed to open stream: No such file or directory in /usr/local/lighthouse/softwares/wordpress/wp-content/plugins/spider-analyser/spider.class.php on line 2900