C++20中对于并发方面的进步

devtools/2024/10/21 0:16:59/

在当今的编程世界中,并发处理能力变得越来越重要。C++20 在并发方面带来了一些进步,使开发者能够更高效、更安全地编写多线程应用程序。这些进步主要包括:

  1. 作用域线程(Scoped Threads)

  2. 停止令牌(Stop Tokens)

作用域线程(Scoped Threads)

传统的线程管理常常需要开发者手动确保线程的正确清理和资源释放,这是一个容易出错且繁琐的过程。而作用域线程则巧妙地解决了这个问题。当作用域结束时,与之相关的线程会自动被清理,无需开发者手动处理,极大地降低了资源泄漏的风险。

以下是用法示例:

{std::jthread myThread([&] {// 线程执行的任务});
} 
// 当离开这个作用域时,myThread 会被自动清理和结束

停止令牌(Stop Tokens)

在实际应用中,我们常常需要动态地停止正在运行的线程,例如响应用户的停止操作或者根据系统的状态变化。停止令牌提供了一种优雅且安全的方式来实现这一点。

比如在一个多媒体播放器中,当用户点击“停止播放”按钮时,可以通过设置停止令牌来通知正在进行音频解码和播放的线程停止工作。

std::stop_source source;
std::stop_token token = source.get_token();std::jthread decodingThread([token] {while (!token.stop_requested()) {// 音频解码的代码}
});// 用户点击停止播放
source.request_stop();

注意这里std::stop_source可以产生多个std::stop_token实例。

C++20 中的这些并发改进不仅提高了编程的效率,还增强了代码的可靠性和可维护性。它们使得开发者能够更安全地处理复杂的并发场景,编写出更加健壮和高性能的应用程序。

文章转载自:程鑫

原文链接:https://www.cnblogs.com/chengxin1985/p/18451838

体验地址:引迈 - JNPF快速开发平台_低代码开发平台_零代码开发平台_流程设计器_表单引擎_工作流引擎_软件架构


http://www.ppmy.cn/devtools/125787.html

相关文章

Unity中实现预制体自动巡逻与攻击敌人的完整实现指南

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

SOLIDWORKS 2025版本使用了全新的渲染引擎

SOLIDWORKS 2025版本使用了全新的渲染引擎 北京众联亿诚是达索官方授权的SOLIDWORKS经销商,专业经销SOLIDWORKS正版软件并提供免费试用、培训认证、二次开发等增值服务。 在CAD设计领域,SOLIDWORKS作为一款广受欢迎的3D建模和设计软件,一直…

使用HTML、CSS和JavaScript创建图像缩放功能

使用HTML、CSS和JavaScript创建图像缩放功能 在这篇博客文章中,我们将介绍如何使用HTML、CSS和JavaScript创建一个简单的图像缩放功能。这个功能可以增强用户体验,让访问者在点击图像时查看更大的版本。 效果 步骤1:设置HTML结构 首先&…

2024 年江苏省职业院校技能大赛“区块链技术应用” 赛项赛卷(样卷)运维题解析二

运维题 环境: ubuntu20 fisco 2.8.0 前言 准备两台机子,并且可以能相互pin通 192.168.19.133 [M1-A] 192.168.19.137 [M2-B] 子任务 1-2-3:区块链节点运维 基于已搭建的区块链系统与控制台,在机器(M1-A)上开展区块链群组与 节点的运维工作,具体内容如下: (1)基于…

《机器学习》周志华-CH10(降维与度量学习)

10.1k近邻学习 k k k近邻(k-Nearest Neighbor,简称kNN),监督学习。 工作机制:给定测试样本,基于某种距离度量找出训练集中与其最靠近的 k k k个训练样本,基于这些”邻居“预测。 { 分类任务:选择”投票法“。 k 个样本…

【pytorch】张量求导3

再接上文,补一下作者未补完的矩阵运算的坑。 首先贴一下原作者的图,将其转化为如下代码: import torch import torch.nn as nn import torch.optim as optim# 定义一个简单的两层神经网络 class TwoLayerNet(nn.Module):def __init__(self):super(TwoLayerNet, self).__in…

ubuntu下vscode插件arm keil studio pack遇到的问题

ubuntu下vscode插件arm keil studio pack遇到的问题 Updating registry data from https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip failed to download from https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip {} fai…

Linux中安装 mongodb ,很详细

Linux中安装 mongodb ,很详细 一、环境二、下载1、下载mongodb2、下载mongosh 三、安装1、安装mongodb2、安装mongosh 四、启动和关闭1、启动2、关闭(重要,初次接触强烈建议看看)(1)、命令(2&am…