C++14 17共享超时互斥锁 shared_timed_mutex / 共享锁 shared_mutex

文章介绍了C++中的共享锁(shared_timed_mutex)在读多写少场景中的使用,包括如何在多线程中实现读取时共享数据,写入时互斥操作。同时提到了C++17的shared_mutex及其与shared_timed_mutex的区别。
摘要由CSDN通过智能技术生成

共享锁,也叫读写锁,主要应用与读多写少的场景

比如,在多线程环境下,多个线程操作同一个文件,其中读文件的操作比写文件的操作更加频繁,那么在进行读操作时,不需要互斥,线程间可以共享这些数据,随意的读取。但是一旦有写操作,那么一定要进行互斥操作,否则读取到的数据可能存在不一致。

C++14 共享超时互斥锁 shared_timed_mutex

读线程 调用 lock_shared()获取共享锁,写线程 调用 lock() 获取互斥锁。

  • 当调用lock()的时候,如果有线程获取了共享锁,那么写线程会等待,直到所有线程将数据读取完成释放共享锁,再去锁定资源,进行修改;
  • 当调用lock_shared()时,如果有写线程获取了互斥锁,那么需要等待
  • 当调用lock_shared()时,如果有读线程获取共享锁,也会直接返回,获取成功。

代码示例:

std::shared_timed_mutex stmtx;

void ReadThread()
{
   
    while (true)
    {
   
        stmtx.lock_shared();
        std::cout << "thread id = " << std::this_thread::get_id() << " lock shared  read" << std::endl;
        std::this_thread::sleep_for(std::chrono::milliseconds(200));
        stmtx.unlock_shared();
        std::this_thread::sleep_for(std
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值