19、并发编程中的锁机制与同步策略

并发编程中的锁机制与同步策略

1. 同步与监视器概述

在并发编程中,同步是确保多个线程安全访问共享资源的关键。监视器是一种将同步和数据结合的结构化方式,类似于类将数据和方法封装在一起,监视器将数据、方法和同步封装在一个模块化的包中。

1.1 模块化同步的重要性

假设有一个应用程序,包含一个生产者线程和一个消费者线程,它们通过一个共享的先进先出(FIFO)队列进行通信。一种简单的做法是让线程共享两个对象:一个未同步的队列和一个用于保护队列的锁。生产者的代码可能如下:

mutex.lock();
try {
    queue.enq(x)
} finally {
    mutex.unlock();
}

然而,这种方法存在问题。如果队列是有界的,当队列已满时,尝试添加元素的操作必须等待队列有空间才能继续。此时,是否阻塞调用的决策取决于队列的内部状态,而这对于调用者来说是不可访问的。更糟糕的是,如果应用程序中有多个生产者和消费者,每个线程都必须同时跟踪锁和队列对象,并且只有当每个线程遵循相同的锁定约定时,应用程序才能正常工作。

一种更合理的方法是让每个队列管理自己的同步。队列本身有一个内部锁,每个方法在调用时获取该锁,并在返回时释放。这样,使用队列的线程无需遵循繁琐的同步协议。如果一个线程尝试将元素入队到一个已满的队列中, enq() 方法可以检测到问题,暂停调用者,并在队列有空间时恢复调用者。

2. 监视器锁和条件

2.1 锁的基本概念

锁是确保

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值