zoukankan      html  css  js  c++  java
  • 【C++】c++11多线程初探

    相关头文件
    c++11 新标准中引入了四个头文件来支持多线程编程,他们分别是<atomic> ,<thread>,<mutex>,<condition_variable>和<future>。

    • <atomic>:该头文主要声明了两个类, std::atomic 和 std::atomic_flag,另外还声明了一套 C 风格的原子类型和与 C 兼容的原子操作的函数。
    • <thread>:该头文件主要声明了 std::thread 类,另外 std::this_thread 命名空间也在该头文件中。
    • <mutex>:该头文件主要声明了与互斥量(mutex)相关的类,包括 std::mutex 系列类,std::lock_guard, std::unique_lock, 以及其他的类型和函数。
    • <condition_variable>:该头文件主要声明了与条件变量相关的类,包括 std::condition_variable 和 std::condition_variable_any。
    • <future>:该头文件主要声明了 std::promise, std::package_task 两个 Provider 类,以及 std::future 和 std::shared_future 两个 Future 类,另外还有一些与之相关的类型和函数,std::async() 函数就声明在此头文件中。

    一个简单的例子

    #include <iostream>
    #include <thread>
    void task(int i, int j)
    {
        for (; i <= j; ++i)
            std::cout <<i<<std::endl;
    }
    int main()
    {
        std::thread th1(task, 1,10);
        std::thread th2(task, 11, 20);
        th1.join();
        th2.join();
        std::cin.get();
    }

    thread有以下几种构造函数:

    • (1). 默认构造函数,创建一个空的 thread 执行对象。
    • (2). 初始化构造函数,创建一个 thread对象,该 thread对象可被 joinable,新产生的线程会调用 fn 函数,该函数的参数由 args 给出。
    • (3). 拷贝构造函数(被禁用),意味着 thread 不可被拷贝构造。
    • (4). move 构造函数,move 构造函数,调用成功之后 x 不代表任何 thread 执行对象。
    • 注意:可被 joinable 的 thread 对象必须在他们销毁之前被主线程 join 或者将其设置为 detached.

    一些成员函数:

  • 相关阅读:
    推荐系统(10)—— 进化算法、强化学习
    Throttle Debounce 总结
    文件点击下载
    Mongodb安装及启动正确姿势
    事务的ACID是指什么?
    sqlserver 获取时间字段 每月最后一天 分组(分区)最后一条的记录
    echarts map js或json 地图数据下载
    sqlserver 字段 逗号分隔分组 多行数据
    windows10 中文输入法 增加美式键盘 导致 系统部分语言变成英文
    excel 合并相同内容的单元格 vba
  • 原文地址:https://www.cnblogs.com/cknightx/p/7003337.html
Copyright © 2011-2022 走看看