std::mutex
std::mutex定义在<mutex>头文件中。mutex类是一个同步原型,用来保护共享数据被多个线程同步访问的同步。mutex提供互斥,非递归拥有权语义:
- 一个调用线程拥有一个mutex。从它成功调用lock或者try_lock,直到它调用unlock。
- 当一个线程拥有一个mutex,所有其它的线程如果想要尝试获得mutex的拥有权,则会接收一个false,或者被block(当调用lock时)。
- 一个线程在它调用lock或try_lock之前不能拥有mutex的所有权。
当mutex被销毁,但是它仍然属于其他线程时,或者说一个线程被终止,但是它拥有mutex时,程序的行为是未定义的。
std::mutex既不能copy,也不能move。
Locking
lock 锁定mutex,如果mutex不可达,则block
try_lock 尝试锁定mutex,如果mutex不可达,则返回
unlock 解锁mutex
std::thread
thread(); 创建新的线程对象,但是并不代表一个线程
thread(thread&& other); Move constructor.
std::thread::join 阻塞当前线程,知道被 *this 识别的线程结束它的执行。
std::thread::detach 将线程执行与线程对象隔离,允许无依赖地继续执行。当现成退出,任何获取的资源都会被释放。
当调用完detach,*this就不再属于任何线程了。
std:lock_guard
在<mutex>中定义。类lock_guard是一个mutex wrapper,提供了一个方便的RAII-style机制,用来在scoped block的持续时间拥有一个mutex。
当一个lock_guard对象被创建后,它尝试去获得给定的mutex的所有权。当控制离开lock_guard对象被创建所在的范围,lock_guard对象就被销毁,并且mutex被释放。