深入应用C++11 笔记—互斥量 (七)
互斥量
互斥量是一种同步原语,是一种线程同步的手段,用来保护多线程同时访问共享数据。C++11中提供如下4种语义的互斥量(mutex):
- std::mutex:独占的互斥量,不能递归使用
- std::timed_ mutex:带超时的独占互斥量,不能递归使用
- std::recursive_mutex:递归互斥量,不带超时功能
- std::recursive_timed_mutex:带超时的递归互斥量
1.1 独占互斥量std::mutex
一般是通过lock()方法来阻塞线程,直到获得互斥量的所有权为止,当线程获得互斥量并完成任务之后,必须使用unlock()来解除对互斥量的占用。try_lock()尝试锁定互斥量,如果成功则返回true,否则返回false,它是非阻塞的。
//std::mutex基本用法
#include<iostream>
#include<thread>
#include<mutex>
#include<chrono>
std::mutex g_lock;
void func()
{
g_lock.lock();//lock
std::cout<<"entered thread "<<std::this_thread::get_id()<<std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout<<"leaving thread "<<std::this_thread::get_id()<<std