| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> C++知识库 -> C++11:thread详细总结 -> 正文阅读 |
|
[C++知识库]C++11:thread详细总结 |
join,detach
lock_guard,unique_lock
once_flag在多线程的并发执行中,我们可能某些操作想要只执行一次。比如说读取文件的多线程中,打开文件只需要执行一次,但是CPU调度机制我们不知道哪个线程先执行,所以便有了 once_flag 这个类,和call_once函数配和使用。 它是一个不可复制、**不可移动、**只有默认可构造的类。 std::once_flag m_flag; std::call_once(m_flag,回调函数,回调参数);//回调函数如果有返回值将忽略。 回调函数只会执行一次,即使它被多个线程调用。 条件变量
线程异步编程(future,async,promise)
我们可以使用引用传值,但是这样就需要锁和条件变量,这样程序会变得繁琐,并且性能低下,C++11提供了另一种方法: ? 这里主线程得到了 x=24 (4的阶乘) **future<>**类模板:? 从未来获得某个变量的模板类,类模板 ? 类模板
注意, ? future详解 shared_future<> 类模板:? 如果有需求我们要在多个线程中共享一个共享状态,但是因为future.get函数只能调用一次并且 future只能移动构造,所以future是行不通的。 ? 类模板 ? 若每个线程通过其自身的 ? 可用于同时向多个线程发信,类似 std::condition_variable::notify_all() ? 因为 该类模板提供了 普通拷贝构造,所以传值可以不用引用传值。 async函数模板:? 会自动创建一个异步任务去调用线程函数, ? std::async有两个版本: ? 1.无需显示指定启动策略,自动选择,因此启动策略是不确定的,可能是std::launch::async,也可 ? 能是std::launch::deferred,或者是两者的任意组合,取决于它们的系统和特定库实现。 ? 2.允许调用者选择特定的启动策略。 ? std::async的启动策略类型是个枚举类enum class launch,包括: ? 1.std::launch::async:异步,立即启动一个新的线程调用Fn,该函数由新线程异步调用,并且将其返 回值与共享状态的访问点同步。 ? 2.std::launch::deferred:延迟,在访问共享状态时该函数才被调用。对Fn的调用将推迟到返回的 ? std::future的共享状态被访问时(使用std::future的wait或get函数)。 ? 参数Fn:可以为函数指针、成员指针、任何类型的可移动构造的函数对象(即类定义了operator()的对象)。 Fn的返回值或异常存储在共享状态中以供异步的std::future对象检索。 ? 参数Args:传递给Fn调用的参数,它们的类型应是可移动构造的。 ? **返回值:**当Fn执行结束时,共享状态的std::future对象准备就绪。std::future的成员函数get检索的值 是Fn返回的值。当启动策略采用std::launch::async时,即使从不访问其共享状态,返回std::future 也会链接到被创建线程的末尾。在这种情况下,std::future的析构函数与Fn的返回同步。 ? async详解
packaged_task<>类模板类模板 正如 std::function , 用法std::packaged_task<函数返回类型(参数类型)> 变量名(函数名) int fun(int x) { int main() |
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 22:33:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |