并发编程中的锁与数据结构实现
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(
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



