C++ 自带的临界区、Mutex等只支持唯一锁,这对性能是有很大影响的。

Boost提供共享锁功能,能够对读写区分加锁。

// 头文件
#include <boost/thread/shared_mutex.hpp>
#include <boost/thread.hpp>

typedef boost::shared_mutex                Lock;                    
typedef boost::unique_lock<Lock>    WriteLock;
typedef boost::shared_lock<Lock>    ReadLock;

Lock  myLock;           mutex对象定义

void ReadFunc()
{

// 之前没有影响
    ReadLock  r_lock(myLock);         // 加读锁

// 作用域到最后一行,也可以使用{}包含代码表示作用域
    //  处理代码

}

void WriteFunc()
{
    WriteLock  w_lock(myLock);      // 加写锁
    // 处理代码
}

锁住的对象都是myLock;

可以同时加多个读锁,

但是一旦加写锁时,就不能加别的读锁和写锁

https://www.cnblogs.com/ityujian/archive/2013/04/30/3051865.html

C++ boost共享锁 unique_lock shared_lock相关推荐

  1. 多线程服务器的常用编程模型 .

    转自: 陈硕 (giantchen_AT_gmail) : http://blog.csdn.net/solstice/article/details/5307710 本文主要讲我个人在多线程开发方面 ...

  2. 单体模式singleton

    在c++实现单体模式和c#,java有些不同 .h class Param { public:static Param& GetIntance(){return m_param;}static ...

  3. php框架费尔康,GitHub - majixian/study-phalcon: phalcon(费尔康)框架学习笔记

    phalcon(费尔康)框架学习笔记 以实例程序invo为例(invo程序放在网站根目录下的invo文件夹里,推荐php版本>=5.4) 环境不支持伪静态网址时的配置 第一步: 在app\con ...

  4. boost::shared_lock相关的测试程序

    boost::shared_lock相关的测试程序 实现功能 C++实现代码 实现功能 boost::shared_lock相关的测试程序 C++实现代码 #include <boost/thr ...

  5. (十一)boost库之多线程间通信

    1.互斥锁 在编程中,引入了对象互斥锁的概念,来保证共享数据操作的完整性.每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象. # ...

  6. 【Boost】boost库中thread多线程详解2——mutex与lock

    1. mutex对象类 mutex类主要有两种:独占式与共享式的互斥量. ▲ 独占式互斥量: mutex: 独占式的互斥量,是最简单最常用的一种互斥量类型 try_mutex: 它是mutex的同义词 ...

  7. 共享锁和排它锁---C++17 多线程

    共享锁和排它锁-C++17 多线程 读写锁把对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作.C++17开始,标准库提供了shared_mutex类(在这 ...

  8. boost互斥锁_boost锁使用总结

    boost锁的概述: boost库中提供了mutex类与lock类,通过组合可以轻易的构建读写锁与互斥锁. 举个通俗的例子,如果共享资源是一个自动锁住的房间,互斥体是钥匙,进入房间必须取钥匙,离开房间 ...

  9. boost::lockfree::queue多线程读写实例

    最近的任务是写一个多线程的东西,就得接触多线程队列了,我反正是没学过分布式的,代码全凭感觉写出来的,不过运气好,代码能够work= = 话不多说,直接给代码吧,一个多消费者,多生产者的模式.假设我的任 ...

  10. C++雾中风景12:聊聊C++中的Mutex,以及拯救生产力的Boost

    笔者近期在工作之中编程实现一个Cache结构的封装,需要使用到C++之中的互斥量Mutex,于是花了一些时间进行了调研.(结果对C++标准库很是绝望....)最终还是通过利用了Boost库的share ...

最新文章

  1. 机器学习面试题集 - 详解四种交叉验证方法
  2. 矢量合成和分解的法则_高考复习整理力的合成和分解
  3. B站直播中HLS和去中心化P2P的实际应用
  4. 【Java】统计字符个数
  5. Java类加载文章2(z)
  6. python免费网课-Python网课推荐——免费学习Python编程
  7. 【NOI OpenJudge】【1.3】编程基础之算术表达式与顺序执行
  8. [EMNLP18]用序列标注来进行成分句法分析
  9. 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字(简单易懂)
  10. LintCode—删除链表中的元素(452)
  11. C# 文件与Base64的相互转换
  12. LCD12864驱动显示程序
  13. html页面获取扫码枪参数,js获取扫码枪输入数据的方法
  14. 联想笔记本更换硬盘/改Win 7系统安装过程中报0x000000A5蓝屏
  15. 叶聪:朋友圈背后的计算机视觉技术与应用
  16. 从删库到跑路,DBA 如何防止被淘汰?
  17. 隐函数存在定理1及求导公式_20160505
  18. Thread类实现多线程
  19. java ora-12505_Java Oracle本地主机连接错误(ORA-12505)
  20. 鸿蒙系统安装第三方应用是什么,网友表示:鸿蒙最新系统可以通过连接U盘安装第三方软件了...

热门文章

  1. PHP专家陪练营试听课程下载
  2. MySQL不能插入中文字段的解决办法
  3. 【学习笔记】深入理解js原型和闭包(13)——【作用域】和【上下文环境】
  4. ActiveMQ 无法启动 提示端口被占用 解决方案
  5. 元素“UpdateProgress”不是已知元素。原因可能是网站中存在编译错误
  6. 拓端tecdat|R语言:逻辑回归ROC曲线对角线分析过程及结果
  7. 拓端tecdat|R语言GARCH-DCC模型和DCC(MVT)建模估计
  8. Python脚本实现深大校园网网页登陆
  9. ajax无法访问,Ajax不能跨域访问的解决方案
  10. 学计算机自考商务英语本科好吗,自考本科商务英语专业真的难吗