当前位置: 首页 > news >正文

关于读写锁:有个线程在读,能写吗?有个线程在写,能读吗?

引言

在多线程编程中,读写锁(Read-Write Lock)是一种常见的同步机制,用于解决多个线程同时访问共享资源的问题。

读写锁

读-写问题分析
在回答上述问题之前,我们需要理解两种不同类型的线程操作:读操作和写操作。
读操作是无副作用的操作,它只从共享资源中获取信息而不改变其状态。
写操作是有副作用的操作,它会修改共享资源的状态。
当有多个线程同时访问共享资源时,我们需要确保以下几点:
一致性:所有线程看到的数据是一致的。
原子性:复合操作被视为不可分割的整体,要么全部完成,要么全部不发生。
隔离性:线程间的操作相互独立,不会互相干扰。
持久性:一旦写操作完成,结果必须持久化,即使系统崩溃也能恢复。
读写锁是一种特殊的锁机制,它把对共享资源的访问分为读操作和写操作:
读操作(共享锁):允许多个线程同时读取资源,如果当前没有写者,读锁可以被多个读者持有。当有写者尝试获取锁时,所有新的读请求都会被阻塞,直到写者释放了锁。
写操作(排他锁):只允许一个线程写入资源,写锁是排他的,当一个线程持有写锁时,其他任何线程(无论是读者还是写者)都不能访问资源。只有当写锁被释放后,其他线程才能继续。
读写锁的规则:
读-读:允许并发
读-写:互斥
写-读:互斥
写-写:互斥

C++读写锁实现

C++17引入了std::shared_mutex,这是标准库提供的读写锁实现:

#include <shared_mutex>
#include <thread>
#include <iostream>
#include <vector>
#include <chrono>

class ThreadSafeCounter {
private:
    mutable std::shared_mutex mutex_;
    int value_ = 0;

public:
    // 写操作 - 使用独占锁
    void increment() {
        std::unique_lock<std::shared_mutex> lock(mutex_);
        value_++;
    }

    // 读操作 - 使用共享锁
    int get() const {
        std::shared_lock<std::shared_mutex> lock(mutex_);
        return value_;
    }
};

在这个例子中,std::shared_lock 用于保护读操作,而 std::unique_lock 用于保护写操作。读者可以同时访问共享数据,而写者则需要独占访问。

结论

有个线程在读,能写吗? 不能。如果有线程正在读取数据,那么写操作应该被推迟,直到所有的读操作完成。这是为了确保写操作不会破坏读者看到的一致性视图。
有个线程在写,能读吗? 也不能。如果一个线程正在写入数据,那么所有其他线程(包括读者和写者)都必须等待,直到写操作完成。这是为了确保写操作的原子性和隔离性。

相关文章:

  • python 同一行显示多条语句
  • 探秘Transformer系列之(9)--- 位置编码分类
  • Java 大视界 -- 基于 Java 的大数据分布式任务调度系统设计与实现(117)
  • Hexo常用指令大全
  • 递归—基础算法
  • 【Java数据结构】前K个高频单词
  • Linux - 网络基础(应用层,传输层)
  • 详细解析MFC第一个桌面应用程序
  • 零基础C语言学习日志23(动态内存管理)
  • Windows下安装VMware Workstation 17并设置支持MacOS
  • 基于单片机的室外休闲智能座椅设计(论文+源码)
  • 第4章 Function 语意学2: Virtual Member Functions
  • merge函数
  • 大模型架构记录2
  • 阿里云 ESA 游戏行业解决方案|安全防护、加速、低延时的技术融合
  • 2025.3.9机器学习笔记:文献阅读
  • 用低代码平台集成人工智能:无需专业开发也能实现智能化
  • 访问控制列表(ACL):深入理解网络的“通行规则”
  • Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理
  • 分布式锁—5.Redisson的读写锁二
  • 证监会披露两起操纵市场处罚结果,今年来涉操纵股票罚没金额超7.5亿元
  • 首次带人形机器人走科技节红毯,傅利叶顾捷:机器人行业没包袱,很多事都能从零开始
  • 霍步刚任辽宁沈阳市委书记
  • 在本轮印巴冲突的舆论场上也胜印度一筹,巴基斯坦靠什么?
  • 多地举办演唱会等吸引游客刺激消费,经济日报:引导粉丝经济理性健康发展
  • 娃哈哈:自4月起已终止与今麦郎的委托代工关系,未来将坚持自有生产模式