20、并发编程中的锁与数据结构实现

并发编程中的锁与数据结构实现

1. 锁与信号量

在并发编程中,锁是实现线程同步的重要工具。互斥锁保证同一时间只有一个线程能进入临界区,若其他线程想进入,就会被阻塞,直到另一个线程通知它再次尝试。而信号量(Semaphore)是互斥锁的一种扩展。

每个信号量都有一个容量,用 c 表示。它允许最多 c 个线程同时进入临界区,这个容量在信号量初始化时确定。信号量类通常提供两个方法: acquire() 用于请求进入临界区的权限, release() 用于通知离开临界区。信号量本质上是一个计数器,记录被允许进入的线程数量。如果新的 acquire() 调用将超过容量 c ,调用线程将被挂起,直到有空闲位置。当线程离开临界区时,调用 release() 通知等待线程有空闲位置。

以下是信号量的 Java 实现代码:

public class Semaphore {
    final int capacity;
    int state;
    Lock lock;
    Condition condition;

    public Semaphore(int c) {
        capacity = c;
        state = 0;
        lock = new ReentrantLock();
        condition = lock.newCondition(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值