Lock
来源:互联网 发布:极限编程实践 编辑:程序博客网 时间:2024/06/18 11:34
//in windows#include <Windows.h>CRITICAL_SECTION m_Lock;InitializeCriticalSection(&m_Lock);EnterCriticalSection(&m_Lock); //进入临界区LeaveCriticalSection(&m_Lock); //离开临界区//in c++ {lib include path--C:\local\boost_1_62_0 lib path--C:\local\boost_1_62_0\lib32-msvc-14.0 }#include <boost/thread/thread.hpp> typedef boost::shared_lock<boost::shared_mutex> writeLock;boost::shared_mutex m_Mutex;void Record::Write(int tid, char *moudlename, char *msg, int level){ writeLock wtlock(m_Mutex); //Go to work....}//不能在这里lock,这样会使这个函数变成单线程//只有在访问那一块内存的时候才lock --global vs --local
boost中shared_lock和unique_lock的区别
简单的说:
shared_lock是read lock。被锁后仍允许其他线程执行同样被shared_lock的代码。这是一般做读操作时的需要。
unique_lock是write lock。被锁后不允许其他线程执行被shared_lock或unique_lock的代码。在写操作时,一般用这个,可以同时限制unique_lock的写和share_lock的读。
Samples
SetFields(); //boost::shared_lock< boost::shared_mutex > xLock
GetFields(); //boost::unique_lock< boost::shared_mutex > xLock
//用shared_lock, 其他线程不可以执行下面的SetFields(), 但可以同时执行GetFields()
//用unique_lock, 其他线程一定要等到这个函数结束才可以执行SetFields()或GetFields()
C++并发实战9:unique_lock
unique_lock 也有提供 lock()、unlock() 等函数,可以用来加锁解锁mutex,也算是功能比较完整的地方。
unique_lock本身还可以用于std::lock参数,因为其具备lock、unlock、try_lock成员函数,这些函数不仅完成针对mutex的操作还要更新mutex的状态。
Mutex
mutex类4种
std::mutex,最基本的 Mutex 类。
std::recursive_mutex,递归 Mutex 类。
std::time_mutex,定时 Mutex 类。
std::recursive_timed_mutex,定时递归 Mutex 类。
Lock 类(两种)
std::lock_guard,与 Mutex RAII 相关,方便线程对互斥量上锁。
std::unique_lock,与 Mutex RAII 相关,方便线程对互斥量上锁,但提供了更好的上锁和解锁控制。
其他类型
std::once_flag
std::adopt_lock_t
std::defer_lock_t
std::try_to_lock_t
函数
std::try_lock,尝试同时对多个互斥量上锁。
std::lock,可以同时对多个互斥量上锁。
std::call_once,如果多个线程需要同时调用某个函数,call_once 可以保证多个线程对该函数只调用一次。
- LOCK
- LOCK
- lock
- lock
- Lock
- Lock()
- lock
- LOCK
- Lock
- Lock
- Lock
- lock
- lock
- Lock
- Lock
- Lock
- Lock
- lock
- Problem 23 Non-abundant sums (盈数)
- 使用xUtils下载和上传文件
- depot_tools更新失败
- Fragment之我的解决方案:Fragmentation
- Java 自动装箱,拆箱
- Lock
- [心得]http服务不通的解决之道
- Java 脚本支持
- 推荐5款超实用的.NET性能分析工具
- Linux
- Java Collection Framework : List
- VI编辑器的使用
- 学习设计模式(1)——面向接口编程
- POJ 2394 Dijkstra