尽管在广泛使用,但对于结构良好可维护的代码而言,信号量被认为太低层了。主要有两个问题。首先,因为它们的操作是简单的 subroutine 调用,很容易漏掉。第二,除非它们隐藏在抽象之后,否则信号量往往会分散到整个程序中,使得程序变得难以维护。

13.4.1 Monitors

Monitor 是 Dijkstra 建议的一个信号量的解决方案。

13.4.2 Conditional Critical Regions

13.4.3 Synchronization in Java

13.4.4 Transactional Memory

13.4.5 Implicit Synchronization