C++ 多线程编程使用笔记

215 阅读1分钟

1.mutex类

最基本的多线程互斥类。主要使用方法有lock(),加锁,如果获得不到锁则会阻塞。try_lock(),也是加锁不同的是不会阻塞当前线程,并具有返回值。unlock()解锁。值得注意的是这个模板类delete了拷贝构造函数和移动构造函数,目的是为了防止锁的权限发生转移。

2. lock_guard模板类

这个类使用非常的简单,只要传入一个mutex对象就可以。使用的目的是简化上锁解锁的操作。lock_guard会在这个对象构造的时候上锁,析构的时候解锁。这样就不怕写完了以后忘记释放锁了。除了基本的构造函数还可以传入adopt_lock字段,作用是高速类这个mutex已经被加锁了,不再需要再在构造函数中加锁。在lock_guard的与mutex相同这个模板类delete了拷贝构造函数和移动构造函数,目的是为了防止锁的权限发生转移。具体实现的代码如下。


std库的实现代码

3. unique_lock类

unique_lock类可以看做是lock_guard的超集。在实现了lock_guard的基础上提供了更好的对锁的控制。与之前两个类不同的是这个类提供了对包含的mutex移动赋值的特性,即锁的转移。但是与字面对应的是只能由一个对象持有包含的mutex对象。值得注意的是转移的是里面包含的mutex而不是unique_lock类。除此之外,unique_lock还提供了其他的构造函数用来提供不同的特性。具体函数参考这篇博客 unique_lock使用细节