问题 信号量和同步


我无法从javadocs中的信号量描述中理解以下内容。

请注意,没有同步锁定   当acquire()被称为那时举行   会阻止一件物品   回到了游泳池。 信号量   封装同步   需要限制访问池,   与任何同步分开   需要保持一致性   游泳池本身。

有人可以帮助我理解这个及其影响。


10122
2017-10-15 02:37


起源



答案:


信号量充当可用资源池深度的限制器;例如,容量为10的信号量允许最多10个线程同时获取它,并且任何尝试获取它的其他线程将阻塞,直到其他线程之一释放它。

这与普通的互斥或监视器锁定有些不同,后者通常用于防止多个线程同时修改相同的变量并导致不一致的结果或程序状态。

例如,考虑一个限制为10个连接的连接池。需要连接的每个线程将在其使用连接的持续时间内获取信号量(这会阻止太多线程一次请求连接),但池对象在从内部连接时也必须使用同步块或方法收集或放回它们,以防止失去跟踪连接或错误地将同一连接交给两个不同的线程,因为他们同时询问。


11
2017-10-15 02:52



确实是一个很好的解释。 +1 - Adeel Ansari


答案:


信号量充当可用资源池深度的限制器;例如,容量为10的信号量允许最多10个线程同时获取它,并且任何尝试获取它的其他线程将阻塞,直到其他线程之一释放它。

这与普通的互斥或监视器锁定有些不同,后者通常用于防止多个线程同时修改相同的变量并导致不一致的结果或程序状态。

例如,考虑一个限制为10个连接的连接池。需要连接的每个线程将在其使用连接的持续时间内获取信号量(这会阻止太多线程一次请求连接),但池对象在从内部连接时也必须使用同步块或方法收集或放回它们,以防止失去跟踪连接或错误地将同一连接交给两个不同的线程,因为他们同时询问。


11
2017-10-15 02:52



确实是一个很好的解释。 +1 - Adeel Ansari