Java没有内置的Mutex API,但是可以将其实现为二进制信号量

信号量是一种同步机制,用于控制多个线程对资源的访问。它可以维护一个许可计数,线程通过acquire()获取许可,release()释放许可。二进制信号量作为互斥锁使用时,只允许一个线程访问资源,且可由其他线程释放,适合于死锁恢复。信号量不限制所有权,而互斥锁只能由拥有者解锁,且使用时需要明确保护的代码区域。

计数信号量。从概念上讲,信号量维护一组许可证。acquire()如果需要,每个块都会阻塞,直到获得许可为止,然后获得许可。每个都release()添加一个许可证,有可能释放阻止收购方。但是,没有使用实际的许可对象。信号量只是保持可用数量的计数并采取相应措施。

与无法访问某些(物理或逻辑)资源相比,信号量通常用于限制线程数

Java没有内置的Mutex API。但是可以将其实现为二进制信号量。

初始化为一个的信号灯可以用作互斥锁,该信号灯最多只能使用一个许可。这通常被称为二进制信号量,因为它只有两种状态:一个许可可用,或者零许可可用。

当以这种方式使用时,二进制信号量具有属性(与许多Lock实现不同),该“锁”可以由所有者以外的线程释放(因为信号量没有所有权概念)。这在某些特殊情况下(例如死锁恢复)很有用。

因此,信号量和互斥量之间的主要区别是:

  1. 信号量限制线程通过许可访问资源的数量。Mutex仅允许一个线程访问资源。

  2. 没有线程拥有信号量。线程可以通过调用acquire()release()方法来更新许可数量。互斥锁只能由持有锁的线程来解锁。

  3. 当互斥锁与条件变量一起使用时,会出现一个括号,即正在保护程序的哪个部分。信号量不一定是这种情况,可以将其称为并发编程。它功能强大,但以非结构化,不确定的方式易于使用。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值