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

来源:互联网 发布:lnmp环境yum搭建博客 编辑:程序博客网 时间:2024/05/21 12:50

原文: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) 返回当前线程的idsleep_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_lockcondition_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::futurelaunch (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的代码
1 0
原创粉丝点击