C++11多线程
来源:互联网 发布:淘宝男装代理一手货源 编辑:程序博客网 时间:2024/06/03 17:05
一点笔记,后续展开。
thread给线程函数传参默认是值传递,如果需要引用传递,使用std::ref对参数取引用。或是使用std::move取右值引用,前提是参数传递后不会在原线程使用。
std::thread::hardware_concurrency()获取CPU个数,对设置线程数有很大的参考意义。
std::lock
使用死锁避免算法来Lock给定的Lockable的对象lock1,lock2,...,lockn,以防止死锁。
The objects are locked by an unspecifiedseries of calls to lock, try_lock, unlock. If a call to lock or unlock resultsin an exception, unlock is called for any locked objects before rethrowing.
std::lock(m_mutex1, m_mutex2);
std::lock_guard<std::mutex>locker1(m_mutex1, std::adopt_lock);
std::lock_guard<std::mutex>locker2(m_mutex2, std::adopt_lock);
// std::adopt_lock假定当前线程已经获得互斥对象的所有权,所以不再请求锁。
unique_lock比lock_guard更加灵活。
可以控制加锁的范围。
可以在构造函数中增加std::defer_lock参数(lock_guard不支持),表示先不请求锁。
可以多次加锁解锁。
lock_guard和unique_lock都不能复制,但unique_lock可以移动。
lock_guard性能要高些。
条件变量与锁共用,使用unique_lock,不能使用lock_guard,因为有重复的加解锁动作。
条件变量虚假唤醒(cond_signal或notify_one可能会唤醒多个等待线程),解决:pthread中使用while判断是否wait。C++11中在wait中增加判断条件。
异步编程
std::promise
std::future
std::shared_future
std::async
std::packaged_task
- C 多线程
- C 多线程
- C++:多线程
- c# 多线程
- C#---多线程
- 【C#】多线程
- [C#] 白话C#:多线程
- 【C/C++】多线程
- C/C++windows多线程
- c语言多线程编程
- linux c 多线程
- C#.net使用多线程
- C++builder 中的多线程
- 用C实现多线程
- 用C实现多线程
- C语言多线程创建
- C#Socket多线程实例
- C#:多线程编程探索
- c3p0和dbcp连接池解析
- Permutation in String
- 取得客户端的ip、地理信息、浏览器、本地真实IP
- [Android7.0]NFC初始化的流程分析
- mysql再探
- C++11多线程
- 【九度OJ】题目1035:找出直系亲属
- 在excel中我想选定第5000行,怎样快速选定这一行?
- [Leetcode] 123. Best Time to Buy and Sell Stock III 解题报告
- MYSQL查询多少天之内
- android activity管理(一)之activity的状态管理
- Rails学习总结
- 质因数
- Struts2的几种传参方法