shared_lock and unique_lock
简单的说:
shared_lock是read lock。被锁后仍允许其他线程执行同样被shared_lock的代码。这是一般做读操作时的需要。
unique_lock是write lock。被锁后不允许其他线程执行被shared_lock或unique_lock的代码。在写操作时,一般用这个,可以同时限制unique_lock的写和share_lock的读。
例子:
void GetFields(DBFields& _return, const std::wstring& sGUID) { printf("GetFields\n"); boost::shared_lock< boost::shared_mutex > xLock( GetMutex(sGUID) );
//用shared_lock, 其他线程不可以执行下面的SetFields(), 但可以同时执行GetFields()
_return = GetDataPtr(sGUID)->m_oFieldData.m_oDBFields; }
void SetFields(const std::wstring& sGUID, const DBFields& aFields) {
printf("SetFields\n"); boost::unique_lock< boost::shared_mutex > xLock( GetMutex(sGUID) );
//用unique_lock, 其他线程一定要等到这个函数结束才可以执行SetFields()或GetFields()。
GetSetDataPtr(sGUID)->m_oFieldData.m_oDBFields = aFields; }
转载自http://blog.csdn.net/daraemon418/article/details/7211693
shared_lock and unique_lock的更多相关文章
- C++雾中风景12:聊聊C++中的Mutex,以及拯救生产力的Boost
笔者近期在工作之中编程实现一个Cache结构的封装,需要使用到C++之中的互斥量Mutex,于是花了一些时间进行了调研.(结果对C++标准库很是绝望....)最终还是通过利用了Boost库的share ...
- std::unique_lock<std::mutex> or std::lock_guard<std::mutex> C++11 区别
http://stackoverflow.com/questions/20516773/stdunique-lockstdmutex-or-stdlock-guardstdmutex The diff ...
- c++ unique_lock lock_guard
unique_lock template <class Mutex> class unique_lock; Unique lock A unique lock is an object t ...
- c/c++ 多线程 unique_lock的使用
多线程 unique_lock的使用 unique_lock的特点: 1,灵活.可以在创建unique_lock的实例时,不锁,然后手动调用lock_a.lock()函数,或者std::lock(lo ...
- c++11のunique_lock和once_flag
一. Unique _lock和lockguard一样,到那时比lockguard更加灵活,可以随时按照需要加锁开锁 std::unique_lock<std::mutex> locker ...
- std::lock_guard/std::unique_lock
C++多线程编程中通常会对共享的数据进行写保护,以防止多线程在对共享数据成员进行读写时造成资源争抢导致程序出现未定义的行为.通常的做法是在修改共享数据成员的时候进行加锁--mutex.在使用锁的时候通 ...
- C++ 11 多线程下std::unique_lock与std::lock_guard的区别和用法
这里主要介绍std::unique_lock与std::lock_guard的区别用法 先说简单的 一.std::lock_guard的用法 std::lock_guard其实就是简单的RAII封装, ...
- C++11并发——多线程lock_gurad ,unique_lock (三)
http://www.cnblogs.com/haippy/p/3346477.html struct defer_lock_t {}; 该类型的常量对象 defer_lock(defer_lock ...
- std::lock_guard和std::unique_lock
std::unique_lock也可以提供自动加锁.解锁功能,比std::lock_guard更加灵活 https://www.cnblogs.com/xudong-bupt/p/9194394.ht ...
随机推荐
- slice、splice与split傻傻分不清
每每看到这几个,就蒙圈了,这都是啥呀? 既然这么容易混淆,我还是来做个小笔记吧,以便日后查阅: 1.slice(数组) 定义:slice() 方法可从已有的数组中返回选定的元素. 用法:array ...
- Oracle_SQL92_连接查询
Oracle_SQL92_连接查询 笛卡儿积 --笛卡尔积 select * from emp;----14 select * from dept;----4 select * from emp, ...
- thinkPHP中_initialize方法实例分析
子类的_initialize方法自动调用父类的_initialize方法. 而php的构造函数construct,如果要调用父类的方法,必须在子类构造函数显示调用parent::__construct ...
- 在Intellij idea 2017中运行tomcat 8.5
前提:jdk,tomcat都已安装完,环境变量该配置的都配置了,tomcat localhost:xx 能登上去 首先新建web小项目 new project next 为项目命个名 finis ...
- UITableViewCell滑动删除及移动
实现Cell的滑动删除, 需要实现UITableView的代理UITableViewDelegate中如下方法: //先要设Cell可编辑 - (BOOL)tableView:(UITableView ...
- 全栈开发之HTML快速入门(一)
一.HTML 是什么? HTML 指的是超文本标记语言 (Hyper Text Markup Language) HTML 不是一种编程语言,而是一种标记语言 (markup language) 标记 ...
- Weblogic新建域,Weblogic新建部署环境,Weblogic重新构建域
Weblogic新建域,Weblogic新建部署环境,Weblogic重新构建域 ======================== 蕃薯耀 2018年1月29日 http://www.cnblogs. ...
- SecurityException
摘录自http://www.cnblogs.com/haorenjie/archive/2012/09/12/2682655.html public boolean checkNetwork() { ...
- [知了堂学习笔记]_css3特效第一篇--旋转的背景&翻书效果
一.html遮盖层与css3的旋转动画 >效果图(加载可能会慢一点儿,请稍等...): >实现思路:在一个大的div中装入一个底层img和顶层的div(里面的内容按照以上图片呈现的样式布局 ...
- junit3.8的使用
今天开始junit使用系列,第一篇梳理junit3X系列,先贴下代码来体验下. 测试源代码如下: package test.junit38test; /** * @创建作者: LinkinPark * ...