您的位置:首页 > 编程语言 > C语言/C++

C++ 11相关知识学习

2017-02-25 17:56 295 查看

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被释放。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: