跳转到内容
主菜单
主菜单
移至侧栏
隐藏
规范/协议
协议
算法
JVM
多线程/并发
存储
AI
深度学习
工具箱
最近更改
文章分类
全部文章
WHY42
搜索
搜索
外观
登录
个人工具
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Boost:共享锁”︁的源代码
页面
讨论
大陆简体
阅读
查看源代码
查看历史
工具
工具
移至侧栏
隐藏
操作
阅读
查看源代码
查看历史
常规
链入页面
相关更改
页面信息
外观
移至侧栏
隐藏
←
Boost:共享锁
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
=示例代码= <source lang="cpp"> #include <iostream> #include <boost/thread.hpp> #include <windows.h> int sum = 0; boost::shared_mutex mu; int write(int c){ for (int i = 0; i < c; i++){ boost::unique_lock<boost::shared_mutex> lock(mu); sum++; cout << "=>" << sum << endl; } return sum; } void read(int nCount){ for (int i = 0; i < nCount; i++){ boost::shared_lock<boost::shared_mutex> lock(mu); cout << "<=" << sum << endl; } } int main(int argc, char* argv[]) { boost::thread t1(write, 100); boost::thread t2(read, 100); boost::thread t3(read, 100); t1.join(); t2.join(); t3.join(); system("pause"); return 1; } </source> =代码分析= 如果屏蔽掉上述代码两处加锁的地方,会出现什么情况? *第一次 [[Image:Test_Thread_ts1.png|600px]] *第二次 [[Image:Test_Thread_ts2.png|600px]] 可以看出,这两处地方读取到的数值是不对的,可能是在写的同时,正好读取到了脏数据。如果加上锁,结果才会如预期一样,是依次递增的。 [[Category:Programe]]
返回
Boost:共享锁
。
搜索
搜索
查看“︁Boost:共享锁”︁的源代码
添加话题