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

C++11中的线程支持库(Thread support library)

2016-05-23 23:33 183 查看
原文:http://en.cppreference.com/w/cpp/thread

Thread support library (线程支持库)

C++包含了对线程、互斥、条件变量和futures的内在支持。

线程

线程使得程序能够跨多个处理器核心执行。

定义在thread头文件中:

thread (C++11) 管理一个单一线程

管理当前线程的函数

定义在this_thread namespace中的:

yield (C++11) 建议实现重新规划线程的执行时机 (suggests that the implementation reschedule execution of threads)
get_id (C++11) 返回当前线程的id
sleep_for (C++11)停止当前线程的执行,直到指定的时间段之后
sleep_until (C++11)停止当前进程的执行,直到指定的时间点

缓存尺寸访问 (Cache size access)

定义在 new 头文件中:

hardware_destructive_interference_size (C++17)最小偏移以避免false共享(min offset to avoid false sharing)
hardware_constructive_interference_size (C++17)最大偏移以提升true共享(max offset to promote true sharing)

互斥 (Mutual exclusion)

互斥算法防止多个线程同时访问共享资源。这防止了数据竞争,提供了对线程间同步的支持。

定义在 mutex 头文件中:

mutex (C++11)提供基本的互斥功能
time_mutex (C++11)提供互斥功能,此互斥功能实现了定时器性质的锁
recursive_mutex (C++11)提供互斥功能,此互斥功能可以被同一个线程多次递归地锁住
recursive_timed_mutex (C++11)提供互斥功能,此互斥功能可以被同一个线程多次递归地锁住,并且实现了带定时器的锁定
shared_mutex (C++17)提供共享的互斥功能
shared_timed_mutex (C++14) 提供共享的互斥功能

普通mutex管理

定义在 mutex 头文件中:

lock_guard (C++11) 实现了一个严格的基于scope的互斥量ownership的封装者(wrapper)
unique_lock (C++11)实现了movable的互斥量ownership的封装者(wrapper)
shared_lock (C++14)实现了movable的共享的互斥量的ownership的封装者(wrapper)
defer_lock_t (C++11)一种标记类型,用以指定锁定策略
try_to_lock_t (C++11)同上
adopt_lock_t (C++11)同上
defer_lock (C++11)标记常量,用以指定锁定策略
try_to_lock (C++11)同上
adopt_lock (C++11)同上

普通锁定算法

try_lock (C++11)通过反复地调用try_lock,试图获得互斥量的所有权
lock (C++11)锁定指定的互斥量,如果有的是unavailable,就进入Block状态

Call once

once_flag (C++11) 是一个帮助者对象(helper object),用以保证call_once调用该方法仅仅一次
call_once (C++11)即使在多个线程中同时调用一个方法,该方法也仅仅被执行一次

条件变量 (Condition variable)

条件变量是一个同步原语,它使得多线程可以互相通信。它使得一些线程等待()或者超时另一个线程的通知以使得它们继续。

一个条件变量总是伴随着一个互斥量。

定义在 condition_variable 头文件中:

condition_variable (C++11) 提供一个条件变量,配合使用的是std::unique_lock
condition_vairable_any (C++11)提供一个条件变量,可以配合任意的lock类型
notify_all_at_thread_exit (C++11) 当线程结束的时候,规划一个对notify_all的调用
cv_status (C++11) 列出等在条件变量Shanghai的可能的结果 (lists the possible results of timed waits on condition variables)

Futures

标准库提供一些功能以观察被返回的值以及抓取被异步任务(即:在其他线程启动的函数)所抛出的异常。这些值以一种共享的状态来被传送。在这种共享状态下,异步任务可以写返回值或存储一个异常,而这个值或异常可以被持有std::future或std::shared_future实例的其他线程来检查、等待和操作。

定义在 future 头文件中:

promise (C++11) 为异步的获取而存储一个值
packaged_task (C++11)打包一个函数,以便为异步的获取而存储该函数的返回值
future (C++11)等待一个被设为异步的值
shared_future (C++11)等待一个被设为异步的值(该值可能被其他futures所引用)
async (C++11) 异步地运行一个函数(在一个新的线程中),并返回一个含有结果的std::future
launch (C++11) 为std::async指定launch的策略
future_status (C++11)指定作用在std::future和std::shared_future上的结果

Future errors

future_error (C++11) 报告一个关于futures或promises的错误
future_category (C++11) 指定该future error的种类
future_errc (C++11) 指定该future error的代码
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: