发布于 2018-12-28 08:57:14
在更彻底地阅读了solaris文档之后,我能够理解基本的想法,所以我将回答我自己的问题。
转门解决了什么问题?相对于互斥,回转栅极有什么优势?线程和转门之间的所有权关系是什么?(如有的话)。
旋转栅极可以帮助减少互斥量(或任何其他同步单元)。当我们想要使用旋转栅门来保护带有某种锁的对象时,锁就变成了一个轻量级对象,它将所有操作委托给转门。每个螺纹最多可与一个转门相关。因此#旋转门是≤#线程。这种方法有助于减少非活动锁的数量。但是,线程和转门之间没有一些明确的所有权AFAIK。
如果我们降低了这些实现的复杂性,那么转门的最基本的最小结构是什么?
我们可以通过以下方式实现天真的旋转栅门。
使用操作Turnstiles和put分配一个全局的get池(很明显,它必须是线程安全的)。对于池来说,无锁堆栈可以是一个相对容易和有效的实现。TurnstileLock是一个对象,它将替换我们的锁和互斥,并将责任委托给Turnstile。TurnstileLock持有指向Turnstile的可空指针。
当某些线程想要进入由TurnstileLock保护的关键部分时,它会检查TurnstileLock.currentTurnstile是否为null (默认情况下必须为null )。
TurnstileLock.currentTurnstile,递增TurnstileLock.currentTurnstile.waitingCount并输入关键部分。TurnstileLock.currentTurnstile.waitingCount并等待某些条件变量,这些条件变量必须通过currentTurnstile访问。当某个线程想要离开关键部分(或释放锁)时,它必须检查TurnstileLock.currentTurnstile.waitingCount > 0 (在递减之后)
TurnstileLock.currentTurnstile放回池中,并将TurnstileLock.currentTurnstile设置为null。https://stackoverflow.com/questions/53565301
复制相似问题