多线程API阐明:http://www.cplusplus.com/refe...

两种类型的多任务处理:基于过程和基于线程。

  • 基于过程的多任务处理是程序的并发执行。
  • 基于线程的多任务处理是同一程序的片段的并发执行。

<thread>

std::thread 在 #include<thread> 头文件中申明,因而应用 std::thread 时须要蕴含 #include<thread> 头文件。

蕴含std::thread类以及std::this_thread命名空间。治理线程的函数和类在 中申明.
< atomic > :蕴含std::atomic和std::atomic_flag类,以及一套C格调的原子类型和与C兼容的原子操作的函数。

构造函数

  • 默认构造函数
thread() _NOEXCEPT        {    // construct with no thread        _Thr_set_null(_Thr);        }        创立一个空的 thread 执行对象。
  • 初始化构造函数
template<class Fn, class... Args>explicit thread(Fn&& fn, Args&&... args);        创立std::thread执行对象,该thread对象可被joinable,新产生的线程会调用threadFun函数,该函数的参数由 args 给出
  • 拷贝构造函数
thread(const thread&) = delete;拷贝构造函数(被禁用),意味着 thread 不可被拷贝结构。
  • Move构造函数
thread(thread&& x)noexceptmove 构造函数,调用胜利之后 x 不代表任何 thread 执行对象。留神:可被 joinable 的 thread 对象必须在他们销毁之前被主线程 join 或者将其设置为 detached。

成员函数

  • get_id()

get_id-API阐明:
获取线程ID,返回类型std::thread::id对象。

inline thread::id thread::get_id() const _NOEXCEPT    {    // return id for this thread    return (_Thr_val(_Thr));    }Returns the thread id.返回以后调用的线程ID。If the thread object is joinable, the function returns a value that uniquely identifies the thread.If the thread object is not joinable, the function returns a default - constructed object of member type thread::id.
  • joinable

joinable-API阐明:判断线程是否能够退出期待

bool joinable() const _NOEXCEPT        {    // return true if this thread can be joined        return (!_Thr_is_null(_Thr));        }Returns whether the thread object is joinable.返回线程对象是否是joinable的。A thread object is joinable if it represents a thread of execution.如果是一个正在执行的线程,那么它是joinable的。A thread object is not joinable in any of these cases:下列任一状况都是非joinableif it was default-constructed.默认结构器结构的。if it has been moved from (either constructing another thread object, or assigning to it).通过挪动结构取得的。if either of its members join or detach has been called.调用了join或者detach办法的。
  • join
inline void thread::join()    {    // join thread    if (!joinable())        _Throw_Cpp_error(_INVALID_ARGUMENT);    const bool _Is_null = _Thr_is_null(_Thr);    // Avoid Clang -Wparentheses-equality    if (_Is_null)        _Throw_Cpp_error(_INVALID_ARGUMENT);    if (get_id() == _STD this_thread::get_id())        _Throw_Cpp_error(_RESOURCE_DEADLOCK_WOULD_OCCUR);    if (_Thrd_join(_Thr, 0) != _Thrd_success)        _Throw_Cpp_error(_NO_SUCH_PROCESS);    _Thr_set_null(_Thr);    }    The function returns when the thread execution has completed.当该线程执行实现后才返回。(即期待子线程执行结束才继续执行主线程)This synchronizes the moment this function returns with the completion of all  the operations in the thread: This blocks the execution of the thread that calls  this function until the function called on construction returns (if it hasn't yet).该函数的返回与子线程执行结束同步,该函数会阻塞调用该函数的线程直到子线程调用结束。After a call to this function, the thread object becomes non-joinable and can be destroyed safely.调用该函数后,子线程对象变成non-joinable以及能够平安地销毁。
  • detach
void detach()        {    // detach thread        if (!joinable())            _Throw_Cpp_error(_INVALID_ARGUMENT);        _Thrd_detachX(_Thr);        _Thr_set_null(_Thr);        }        Detaches the thread represented by the object from the calling thread, allowing them to execute independently from each other.将本线程从调用线程中分离出来,容许本线程独立执行。(然而当主过程完结的时候,即使是detach()进来的子线程不论有没有实现都会被强制杀死)Both threads continue without blocking nor synchronizing in any way. Note that when either one ends execution, its resources are released.两个线程不会梗塞也不会同步,留神他们任一一个完结的时候,所持有的资源将会被开释。After a call to this function, the thread object becomes non-joinable and can be destroyed safely.调用该办法后,该线程对象变得不可连贯以及能够平安地销毁。
  • swap
  • native_handle
  • hardware_concurrency [static]

<atomic>

<mutex>

蕴含了与互斥量相干的类以及其余类型和函数

<future>

蕴含两个Provider类(std::promise和std::package_task)和两个Future类(std::future和std::shared_future)以及相干的类型和函数。

<condition_variable>

蕴含与条件变量相干的类,包含std::condition_variable和std::condition_variable_any。

线程池

线程同步

https://blog.csdn.net/qwerdf1...

异步

线程治理(一个线程治理其余线程)