C++20 std::jthread

C++20 std::jthread

std::jthread 表示 joining thread , 与C++11里面的std::thread不同std::jthread 自动join, 并且可以被外部终止

image-20220806000055090

自动join

std::thread

#include <iostream>
#include <thread>
using namespace std;int main(int argc, char* argv[])
{std::cout << std::boolalpha << std::endl;std::thread thr{[] { cout << "joinable std::thread<<" << std::endl; }};std::cout << thr.joinable() << std::endl;
}

执行后会发生:

image-20220806000931700

std::jthread

#include <iostream>
#include <thread>
using namespace std;int main(int argc, char* argv[])
{std::cout << std::boolalpha << std::endl;std::jthread thr{[] { cout << "joinable std::thread" << std::endl; }};std::cout << thr.joinable() << std::endl;
}

可以正常运行

外部请求终止

请求终止,不是强制终止, 是否终止由线程本身决定 ,保证终止前能调用析构函数, 遵循RALL

#include <iostream>
#include <thread>
using namespace std;int main(int argc, char* argv[])
{std::jthread nonInterruptable([](){int counter{0};while (counter < 10){ // 不可以接收终止请求std::this_thread::sleep_for(0.2s); // CPP真是越来越好用了std::cerr << "non-interruptable thread: " << counter << '\n';++counter;}});std::jthread interrupttible([](std::stop_token stoken){int counter{0};while (counter < 10){std::this_thread::sleep_for(0.2s);if (stoken.stop_requested()) return; // 可以接收终止请求std::cerr << "interruptible" << counter << endl;++counter;}});std::this_thread::sleep_for(1s);std::cerr << endl;nonInterruptable.request_stop(); // 发送终止请求,但是并没有用interrupttible.request_stop(); // 发送终止请求,成功让线程终止cout << endl;
}

image-20220806002629959

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407893.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET资源收集

.NET开发资源精华收集与共享 .Net General微软.Net中文主页 .NET Framework开发中心 微软.Net Framework中文产品支持中心 微软.Net Framework中文新闻组(Web) 微软VB.Net中文新闻组(Web) 博客园 .NET 2.0 专题 孟宪会之精彩世界 微软.NET俱乐部 MSDN中文网络广播 AspxBoy教程网…

C++ 20 内存模型(一)

C 20 内存模型(一) 多线程的基础是优秀的内存模型 C20 内存模型: 高复杂性, 难以理解对多线程有更深入的理解 内存布局 位域 member_name成员名, width bit 宽度 struct bit_field_name {type member_name : width; };struct my_struct {char a;int b : 5; // 最大存储 …

C++20 Atomic 原子 内存模型(二)

C20 Atomic 原子 内存模型(二) 原子是C内存模型的基础 强/弱内存模型 1. 强内存模型 Leslie Lamport 定义了顺序一致性的概念 顺序一致性提供两个保证: 指令按源码的顺序执行对所有线程的所有指令有全局的顺序 以上不仅仅作用于原子, 也影响着非原子变量 int main(int a…

IOS设计模式之二(门面模式,装饰器模式)

本文原文请见&#xff1a;http://www.raywenderlich.com/46988/ios-design-patterns.由 krq_tiger&#xff08;http://weibo.com/xmuzyq&#xff09;翻译&#xff0c;如果你发现有什么错误&#xff0c;请与我联系谢谢。门面&#xff08;Facade&#xff09;模式&#xff08;译者…

1.使用 Blazor 利用 ASP.NET Core 生成第一个 Web 应用

参考 https://dotnet.microsoft.com/zh-cn/learn/aspnet/blazor-tutorial/create 1.使用vs2022创建新项目 选择 C# -> Windows -> Blzxor Server 应用模板 2.项目名称BlazorApp下一步 3.选择 .NET6.0 或 .NET7.0 或 .NET8.0 创建 4.运行BlazorApp 5.全部选择是。 信…

BROCADE 300和MD3200扩展柜FC SAN,截图

这表示俺玩过&#xff0c;其实&#xff0c;这个光交换机在只有一个共享存储的情况下&#xff0c;可用可不用。 FC BROCADE只是为了方便后期扩展。 FC SAN之类的识别不靠IP&#xff0c;因为不是IP SAN嘛。但也是自己的识别体系。 转载于:https://www.cnblogs.com/aguncn/p/36640…

总算有点眉目了!

今天打开一个很久没用的邮箱~发现51CTO居然还记得我给我发了封邮件~我也很久没去了&#xff08;基本上注册过后就没去&#xff09;进去看了下~发现变化好大......壮大了。现在我有点激动&#xff0c;总算找到点眉目&#xff0c;在经过了2年的等死阶段&#xff08;偶于2005年学校…

C++ 20 并发编程 std::promise

C 20 并发编程 std::promise std::promise和std::future是一对, 通过它们可以进行更加灵活的任务控制 promise通过函数set_value()传入一个值, 异常, 或者通知, 并异步的获取结果 例子: void product(std::promise<int>&& intPromise, int a, int b) {intPro…

女孩儿们的那点秘密

女孩终归是女孩&#xff0c;女孩们总是强迫自己要出得了厅堂入得了厨房有木有&#xff1f;可你们造吗&#xff1f;这对女孩来说可都不容易&#xff01; 你们都以为做饭对女孩来说很简单&#xff0c;可知道我们面对四处乱喷热滚滚的油也会手足无措躲得远远的&#xff1f; 别嫌弃…

bootstrap学习笔记(一)网络系统

注&#xff1a;我是根据自己理解写的 有参考http://www.w3cschool.cc/bootstrap该教程。 bootstrap目前有两种默认的网络&#xff08;格&#xff09;系统&#xff1a;一个是940px,另一个是12列。 我们先从12列入手看看&#xff1a; 1.Bootstrap 使用 CSS 的 class "row&q…

委托笔记

刚写了段程序&#xff0c;总算稍微理解了下委托&#xff0c;留下备忘。 定义&#xff1a; 1 publicdelegatestringDelegateTest(stringsss);类中实例化委托&#xff1a; 1 publicclassTestClass2 {3 publiceventDelegateTest _delegateTest;4 5 publicstringBeginDelegate()6 {…

C++ 20 协程总结

C 20 协程总结 介绍 C 20提供的是非对称的、一等对象、无栈的协程&#xff08;Coroutines in C20 are asymmetric, first-class, and stackless&#xff09; 所谓协程&#xff0c;即用户级线程&#xff0c;一种用于将异步代码同步化的编程机制&#xff0c;使得程序的执行流可…

.net程序员的盲点(八):泛型

1.泛型介绍泛型类和泛型方法同时具备可重用性、类型安全和效率&#xff0c;这是非泛型类和非泛型方法无法具备的。泛型通常用在集合和在集合上运行的方法中。.NET Framework 2.0 版类库提供一个新的命名空间System.Collections.Generic&#xff0c;其中包含几个新的基于泛型的集…

Sublime Text 插件之常用20个插件

作为一个开发者你不可能没听说过 Sublime Text。不过你没听说过也没关系&#xff0c;下面让你明白。 Sublime Text是一款非常精巧的文本编辑器&#xff0c;适合编写代码、做笔记、写文章。它用户界面十分整洁&#xff0c;功能非同凡响&#xff0c;性能快得出奇。这些非常棒的特…