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 可以保证多个线程对该函数只调用一次。




0 0