文章目录
前言
关于C++多线程编程的几种实现方式(互斥锁、条件变量、信号量、异步操作、原子操作)小结
一、互斥锁
使用锁的方式对共享资源对象的访问进行控制,操作包括上锁lock()、解锁unlock()
1.mutex
- include <mutex>
- lock和unlock必须成对出现
- 构造出来的mutex对象都是unlock状态
- mutex不允许拷贝构造
- 当前线程lock了mutex,该线程在unlock之前一直拥有该锁,被锁期间阻塞。如果是自身线程调用了lock锁住mutex,可能会产生死锁
- try_lock(),尝试锁,即使被占有也不会阻塞(失败会返回false)
- mutex为最简单的互斥锁,不支持递归上锁,需要递归上锁要使用recursive_lock类
2.lock_guard
- 构造方式:lock_guard<mutex> lck(mtx);
- 相比较mutex最大特点是,构造时自动lock,离开作用域后调用析构函数unlock,可以与智能指针类比
- 采用资源请求初始化(RAII)编程技术,针对动态分