首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >c++11多线程笔记

c++11多线程笔记

作者头像
发布2019-05-25 17:20:33
4730
发布2019-05-25 17:20:33
举报
文章被收录于专栏:

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修饰之后可更改

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档