C++11多线程编程之Lock讲解

本文介绍了C++11中的两种锁类型:lock_guard和unique_lock。lock_guard提供方便的线程互斥量上锁,确保在生命周期内自动管理解锁。unique_lock则更为灵活,允许更精细的上锁和解锁控制,如在构造时不立即上锁或尝试定时上锁。同时,文章提到了与lock相关的一些Tag类,如adopt_lock_t、defer_lock_t和try_to_lock_t。
摘要由CSDN通过智能技术生成

Lock类型

C++11提供两种基本类型的lock

1、lock_guard 方便线程对互斥量上锁

2、unique_lock 方便对互斥量上锁,但是提供了更好的上锁和解锁control


与锁相关的Tag类(通常作为参数传给lock_guard或者unique_lock的构造函数)

std::adopt_lock_t   std::defer_lock_t   std::try_to_lock_t

std::lock_guard介绍:

lock_guard通常用于管理锁对象,方便线程对互斥量上锁;在lock_guard的生命周期内,它所管理的锁对象一直处于上锁状态,生命周期结束后,锁对象就会解锁。实际上lock_guard是自动管理上锁和解锁,类似于smart 指针


std::lock_guard的构造函数

explicit lock_guard(mutex_type& m );

lock_guard(mutex_type&m,adopt_lock_t tag);

lock_guard(const lock_guard&)=delete;

1、lock_guard对象管理Mutex对象m,并在构造时对m上锁(调用m.lock())

2、lock_guard对象管理Mutex对象m,m已经被当前线程锁住

3、lock_guard的拷贝构造和移动构造均被禁用


// constructing lock_guard with adopt_lock
#include <iostream>       // std::cout
#include <thread>         // std::thread
#include <mutex>          // std::mutex, std::lock_guard, std::adopt_lock

std::mutex mtx;           // mutex for critical section

void print_thread_id (int id) {
  mtx.lock();
  std::lock_guard<std::mutex> lck (mtx, std::adopt_lock);
  std::cout << "thread #" << 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值