zoukankan      html  css  js  c++  java
  • c++11多线程笔记

    1 thread类
    thread f;
    线程等待join()
    线程分离detach()

    thread类不可拷贝复制

    std::this_thread::yield();

    2 bind 与lambda表达式

    3 move
    void some_function();
    void some_other_function();
    std::thread t1(some_function); // 1
    std::thread t2=std::move(t1); // 2
    t1=std::thread(some_other_function); // 3
    std::thread t3; // 4
    t3=std::move(t2); // 5
    t1=std::move(t3); // 6 由于t1 已经与一个线程相关联, 赋值操作将使程序崩溃 。 必须显式地等待线程完成或者分离它


    4 mutex
    用法
    std::mutex some_mutex;
    some_mutex.lock()
    some_mutex.unlock()


    策略 tag type 描述
    (默认) 无 请求锁,阻塞当前线程直到成功获得锁。
    std::defer_lock std::defer_lock_t 不请求锁。
    std::try_to_lock std::try_to_lock_t 尝试请求锁,但不阻塞线程,锁不可用时也会立即返回。
    std::adopt_lock std::adopt_lock_t 假定当前线程已经获得互斥对象的所有权,所以不再请求锁。


    策略 std::lock_guard std::unique_lock std::shared_lock
    (默认) √ √ √(共享)
    std::defer_lock × √ √
    std::try_to_lock × √ √
    std::adopt_lock √ √ √


    //unique_lock 可防止死锁
    std::mutex mt1, mt2;
    // thread 1
    {
    std::unique_lock<std::mutex> lck1(mt1, std::defer_lock);
    std::unique_lock<std::mutex> lck2(mt2, std::defer_lock);
    std::lock(lck1, lck2);
    // do something
    }
    // thread 2
    {
    std::unique_lock<std::mutex> lck1(mt1, std::defer_lock);
    std::unique_lock<std::mutex> lck2(mt2, std::defer_lock);
    std::lock(lck2, lck1);
    // do something
    }

    配合std::condition_variable, 在wait时释放锁

    //lock_guard 自动析构
    std::lock_guard<std::mutex> guard(some_mutex);


    5 atomic
    内存模型
    memory_order_release,memory_order_relaxed,memory_order_consume,memory_order_acquire,memoyr_order_acq_rel,memory_order_seq_cst(默认)

    std::atomic_flag f = ATOMIC_FLAG_INIT; // 不能拷贝构造

    std::atomic<bool> b(true); // 可以使用一个非原子类型赋值, 但不能拷贝构造


    6
    std::thread::hardware_concurrency()
    std::async()


    7 mutable
    const 成员函数不能修改 类的成员 , 用mubable修饰之后可更改

  • 相关阅读:
    广度优先搜索-八数码问题
    广度优先搜索-鸣人和佐助
    广度优先搜索-迷宫问题
    广度优先搜索-抓住那头牛
    Unity面试题汇总(第一部分)
    独立项目-Socket通讯 应用/客户端和服务器的简单通讯-04
    独立项目-Socket通讯 服务器端代码-04
    独立项目-Socket通讯 客户端代码-03
    独立项目-Socket通讯 发送数据包和接收数据包过程图-02
    独立项目-Socket通讯 服务器端架构图-01
  • 原文地址:https://www.cnblogs.com/myd620/p/10799177.html
Copyright © 2011-2022 走看看