gpt4 book ai didi

java - Java 中的互斥量和信号量是什么?主要区别是什么?

转载 作者:IT老高 更新时间:2023-10-28 11:22:21 28 4
gpt4 key购买 nike

什么是 Java 中的互斥量和信号量?主要区别是什么?

最佳答案

不幸的是,每个人都忽略了信号量和互斥量之间最重要的区别; “所有权”的概念。

信号量没有所有权的概念,这意味着任何线程都可以释放一个信号量(这本身会导致很多问题,但有助于“死亡检测”)。而互斥体确实具有所有权的概念(即您只能释放已获得的互斥体)。
所有权对于并发系统的安全编程非常重要。我总是建议使用互斥锁而不是信号量(但会影响性能)。

互斥锁还可以支持优先级继承(这有助于解决优先级反转问题)和递归(消除一种死锁)。

还应该指出,存在“二进制”信号量和“计数/通用”信号量。 Java 的信号量是一个计数信号量,因此允许使用大于一的值对其进行初始化(而正如所指出的,互斥量只能在概念上计数为一)。其他帖子中已经指出了这一点的用处。

总而言之,除非您有多个资源要管理,否则我总是推荐互斥锁而不是信号量。

关于java - Java 中的互斥量和信号量是什么?主要区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771347/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com