索引
如何实现互斥
想要实现互斥,那么就利用管程的入口等待队列,控制一次只能有一个线程进入。
如何实现同步
那么就可以利用管程内部的条件变量等待队列,每个需要满足的条件对应一个等待队列,例如“如果A为true”是一个条件,他的条件等待队列为A,所有关注这个条件的线程在条件未满足时放入等待队列中,当条件满足时通知等待队列内的所有线程(notifyAll)或单个线程(notify)。等待通过wait触发。
总结
这种思想在很多语言中都有对应实现,Java中的synchronized、wait、notify、notifyAll就是一种。还有并发包内的各种锁的实现,都是管程。区别是并发包内的实现在单一管程内部支持多个条件变量。而synchronized只支持单一条件变量(也就是synchronized加锁的对象)。
原创文章,作者:geekgao,如若转载,请注明出处:https://www.geekgao.cn/archives/2752