
【计】 shared lock
enjoy together; pool; share
【计】 share; sharing
【经】 pool
model; mould; type
【医】 form; habit; habitus; pattern; series; Ty.; type
【经】 type
lock; lock up
【计】 lock stock and barrel
【医】 lock
在计算机科学领域,共享型锁(Shared Lock),也称为读锁(Read Lock),是一种并发控制机制,允许多个事务或线程同时读取同一资源(如数据库记录、文件),但禁止任何写入操作,直到所有共享锁释放。其核心在于协调“读-读”并行与“读-写”互斥。
共享性(Shared)
多个线程可同时获取共享锁进行读取操作,彼此不阻塞,确保数据读取的高效并发性。
例:10个查询线程可同时读取同一数据块。
排他性约束(Exclusive Constraint)
若资源被施加共享锁,则无法再被授予排他锁(Exclusive Lock, 写锁)。写入操作需等待所有共享锁释放后才可进行,避免“脏读”问题。
例:写入线程需阻塞至所有读取线程完成。
锁兼容性(Lock Compatibility)
当前锁状态 | 请求共享锁 | 请求排他锁 |
---|---|---|
无锁 | ✓ | ✓ |
共享锁 | ✓ | ✗ |
排他锁 | ✗ | ✗ |
数据库管理系统(DBMS)
在SQL事务中,SELECT
语句默认使用共享锁(如SQL Server的NOLOCK
除外),确保事务隔离级别(如Read Committed)下的数据一致性。
参考:Oracle官方文档《Database Concepts》
文件系统同步
多进程读取同一配置文件时,操作系统通过共享锁允许并发读取,但写入进程需等待锁释放。
参考:Microsoft《File Locking Mechanisms》
缓存系统
高并发读场景下(如Redis),共享锁优化读取吞吐量,减少写操作阻塞时间。
特性 | 共享型锁(Shared Lock) | 排他锁(Exclusive Lock) |
---|---|---|
并发读取 | 允许多线程同时读取 | 仅允许单线程访问 |
并发写入 | 禁止任何写入 | 禁止其他读写操作 |
适用操作 | 数据查询(SELECT) | 数据修改(INSERT/UPDATE/DELETE) |
资源占用目标 | 最大化读取并发 | 保障数据写入原子性 |
数据库理论
“共享锁支持事务在读取期间防止其他事务修改数据,是实现‘读已提交’隔离级别的关键。”
——《Database System Concepts》, Abraham Silberschatz 等(第7版)
操作系统原理
“读写锁(Reader-Writer Locks)通过分离共享(读)与独占(写)模式,优化共享资源的访问效率。”
——《Operating System Concepts》, Galvin 等(第10版)
Java并发编程
ReentrantReadWriteLock
类的实现体现了共享锁机制,readLock
允许多线程并发,writeLock
互斥。
参考:Oracle Java Docs
共享型锁通过允许并行读取+阻塞写入的策略,在保障数据一致性的前提下,显著提升系统读取性能,是解决“读多写少”场景并发冲突的核心设计范式。
共享型锁(Shared Lock),又称读锁(Read Lock),是数据库系统中用于控制并发访问的一种锁机制。以下是其核心要点:
共享锁允许多个事务同时读取同一数据资源,但禁止任何事务在持有共享锁期间修改数据。它通过保证数据在读取时的稳定性,实现并发读取的共享性。
共享性
多个事务可同时获取同一数据的共享锁,实现高并发读取。例如:事务A和事务B可同时读取同一行数据。
阻塞排他锁
若某数据存在共享锁,其他事务无法对其加排他锁(写锁),直到所有共享锁释放。这确保了读取过程中数据不被修改。
不可修改性
持有共享锁的事务只能读取数据,不能修改数据。修改操作需先升级为排他锁。
SELECT ... LOCK IN SHARE MODE
语句)。特性 | 共享锁(S锁) | 排他锁(X锁) |
---|---|---|
并发读取 | ✅ 允许多个事务同时读取 | ❌ 仅允许持有锁的事务读写 |
并发写入 | ❌ 禁止任何事务修改 | ✅ 仅持有锁的事务可修改 |
兼容性 | 与其他共享锁兼容 | 与其他所有锁互斥 |
典型应用场景 | 高并发读操作 | 数据修改操作 |
在MySQL中,可通过以下语句显式加共享锁:
SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE;
此时其他事务仍可读取该数据,但无法执行更新或删除操作,直到当前事务提交或回滚。
【别人正在浏览】