04C++11多线程编程之创建多个线程和数据共享问题分析

2023-10-28

04C++11多线程编程之创建多个线程和数据共享问题分析

1 thread循环创建多个子线程
思想就是使用容器创建多个线程,推荐,以后工作中会使用到,具有实际意义,方便统一管理线程。

#include<iostream>
#include<thread>
#include<string>
#include<vector>

using namespace std;


void MyPrint(int i) {
	cout << "my tid = " << this_thread::get_id() << endl;
}


int main(){

	//使用容器创建多个线程,推荐,以后工作中会使用到,具有实际意义,方便统一管理线程
	vector<thread> vTh;
	for (auto i = 0; i < 10; i++) {
		vTh.push_back(thread(MyPrint, i));
	}

	for (auto vit = vTh.begin(); vit != vTh.end(); vit++) {
		if (vit->joinable()) {
			vit->join();
		}
	}

	cout << "回收子线程完成" << endl;

	return 0;
}

结果如下,混乱是因为线程竞争CPU时间分片的原因。
在这里插入图片描述

2 数据共享问题分析
这个很简单,我就不使用代码分析了。注:共享都是指多线程下。
1)只读:不需要做任何处理,都是安全的。
2)有读有写:必须加锁或者其它同步处理,使其安全的访问。否则轻则数据读取的值未知,重则程序崩溃。例如普通全局变量的值未保护,多个线程访问的时候就会可能出现负很大的数;或者是全局vector容器,不作保护并且有删除元素或者push,pop等操作,其它线程此时同样访问该迭代器都会可能出现崩溃,特别是删除。具体可以看我STL容器的文章看。
3)只有写:一般不会只有写,因为都是先读即先判断在确定是否写。

但是说很简单,保护起来就非常的困难了。需要大量的工作经验积累。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

04C++11多线程编程之创建多个线程和数据共享问题分析 的相关文章

  • 2、线程池篇 - 从理论基础到具体代码示例讲解(持续更新中......)

    前言 暂无 一 线程篇 有关线程部分的知识整理请看我下面这篇博客 1 线程篇 从理论到具体代码案例最全线程知识点梳理 持续更新中 二 线程池基础知识 线程池优点 他的主要特点为 线程复用 管理线程 不需要频繁的创建和销毁线程 控制线程数量
  • 集合在多线程下 不安全的代码案例,以及解决方法

    package thread import java util import java util concurrent ConcurrentHashMap import java util concurrent CopyOnWriteArr
  • Java的线程同步 & 并发操作

    并发 CUP在同一时间或同一时段内只能执行一件事情 而不同时件执行时 切换得十分快速 因为CUP的频率非常高 切换的速度人根本感受不出来 同步 同步是多个任务进行时 按照一定的规律进行着 线程并发 同一时间间隔中 有多个线程在同时执行 就是
  • Cpp关键字破解(三)【volatile】篇

    关键字总结 volatile 文章目录 关键字总结 volatile 0 前言 1 概念 2 作用 3 使用场景 4 volatile成员函数 5 代码体验 0 前言 参考几位前辈博客 汇总整理了一下 C 中volatile关键字的使用详解
  • 线程相关面试题

    1 ThreadPoolExecutor 线程池执行 有哪些常用的方法 1 执行线程池 submit excute 2 终止线程池 shutdown 3 判断线程是否终止 isShutdown 4 获取正在运行的线程数 getAcitive
  • Future 和 Callable

    一 Runnable 缺陷 不能返回一个返回值 不能抛出 checked Execption 二 Callable接口 类似于Runnable 被其他线程执行的任务 实现call方法 有返回值 三 Future的作用 Callable和Fu
  • cpu的出错概率?

    我今天想到了一个很不懂的问题 cpu执行指令会出错吗 出错的概率是多少 为什么服务器能够不间断的工作很长时间呢 难道cpu指令级的东西不会出错 操作系统怎么避免这些错误呢 2012 5 27 找到一篇文章 http wuyudong blo
  • Python爬虫——多线程爬虫如何实现?

    Python爬虫 多线程爬虫 1 多任务 2 主线程与子线程 2 1 何谓线程 主线程及子线程 2 2 查看线程数量 2 3 创建子线程 2 4 线程间的通信 3 线程间的资源竞争 4 互斥锁与死锁 4 1 互斥锁 4 2 死锁 4 3 避
  • Cuda Streams的概述(四)-- 同步

    同步 同步的APIs 同步所有的事情 阻塞host端 直到所有的CUDA调用完成 cudaDeviceSynchronize 同步主机端特定的流 阻塞host端 直到流里的CUDA调用完成 cudaStreamSynchronize str
  • 并发编程(二)——内存模型

    前言 欢迎大家一起来学习多线程 大家一起来学习吧 并发编程 一 多线程快速入门 并发编程 二 内存模型 并发编程 三 多线程之间如何实现通讯 并发编程 四 JUC并发包常用方法介绍 并发编程 五 线程池及原理剖析 并发编程 六 java中锁
  • [Java实现 Scoket实时接收Tcp消息 优化层层叠加]

    目录 前言 基础实现代码 描述 优化代码多线程处理客户端连接和消息接收 描述 再次优化异步实现 以下是使用 CompletableFuture 实现异步处理客户端请求的示例代码 描述 进一步优化的代码 Netty来实现Socket服务器 描
  • [QT编程系列-25]:多线程机制 - QThread和MoveToThread简介

    目录 第1章 简介 1 1 多线程的目的 1 2 QThread多线程使用方法 1 3 QT支持多线的步骤 第2章 QThread 2 1 概述 2 2 moveToThread 第1章 简介 1 1 多线程的目的 QThread类提供了一
  • Linux系统编程:多线程交替打印ABC

    引言 分享关于线程的一道测试题 因为网上基本都是Java的解决方法 决定自己写一篇来记录一下线程的学习 问题描述 编写一个至少具有三个线程的程序 称之为线程 A B 和 C 其中线程 A 输出字符 A 线程 B 输出字符 B 线程 C 输出
  • QT实现多线程,以及子线程调用主线程方法与变量

    实现思路 第一步需要将子线程声明为主线程的友元类 第二步是将主线程类对象的地址通过信号槽传递给子线程中创建的对象 使得子线程能访问主线程的数据的 1 子线程 displayresult h 头文件 伪代码 include tabwindow
  • 02Linux下C语言锁的学习之Linux下的读写锁

    02Linux下C语言锁的学习之Linux下的读写锁 概述 下面的锁的意思均是代表读写锁 读写锁的特性 1 若一把锁被一个线程以读方式锁住 当其它线程以读方式上锁的话 那么可以上锁成功 2 若一把锁被一个线程以写方式锁住 当其它线程以读或者
  • 阿里巴巴开发手册-并发处理

    强制 获取单例对象要线程安全 在单例对象里面做操作也要保证线程安全 说明 资源驱动类 工具类 单例工厂类都需要注意 强制 线程资源必须通过线程池提供 不允许在应用中自行显式创建线程 说明 使用线程池的好处是减少在创建和销毁线程上所花的时间以
  • wxwidgets编写多线程程序--wxThread

    细节描述 线程基本上来说是应用程序中一条单独执行的路径 线程有时被称为轻量级进程 但线程与进程的根本不同之处在于不同进程存储空间是相互独立的 而同一进程里的所有线程共享同一地址空间 尽管这使得它更容易共享几个线程间的普通数据 但这也使得它有
  • 多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!

    背景介绍 1 最近有一个大数据量插入的操作入库的业务场景 需要先做一些其他修改操作 然后在执行插入操作 由于插入数据可能会很多 用到多线程去拆分数据并行处理来提高响应时间 如果有一个线程执行失败 则全部回滚 2 在spring中可以使用 T
  • JAVA并发:线程安全与Synchorinzed

    1 什么是线程安全问题 线程的合理使用能够提升程序的处理性能 主要有两个方面 第一个是能够利用多核 cpu 以及超线程技术来实现线程的并行执行 第二个是线程的异步化执行相比于同步执行来说 异步执行能够很好的优化程序的处理性能提升并发吞吐量
  • TaskDecatator用法

    在Spring框架中 TaskDecorator 是一个接口 它可以用来自定义由 ThreadPoolTaskExecutor 或其他任务执行器管理的任务的装饰行为 这通常用于在执行任务之前和之后添加某些上下文相关的行为 比如设置线程上下文

随机推荐

  • json序列化小驼峰格式(属性名首字母小写)

    引用Newtonsoft Json 只需要设置JsonSerializerSettings参数即可 using Newtonsoft Json using System namespace ItemDemo class Program st
  • VUE项目开发,使用jessibuca——实现直播流播放器

    VUE项目开发 使用jessibuca 实现直播流播放器 VUE项目开发 使用jessibuca 实现直播流播放器 效果图 插件目录 public index html页面引入 组件一 组件二 补充内容 加载多个视频 参考连接 VUE项目开
  • 【D3.js - v5.x】(6)绘制树状图

    树状图 在d3 中 绘制树状图 要用到层级布局这个概念 d3 hierarchy data children 根据指定的层次结构数据构造一个根节点 指定的数据 data 必须为一个表示根节点的对象 比如 name Eve children
  • Ceph主要概念

    目录 1 整体架构介绍 1 1 总体介绍 1 2 整体架构 2 集群管理 2 1 Monitor 2 2 心跳管理 3 数据读写 3 1 OSD 3 2 读写流程 3 3 POOL和PG 3 4 CRUSH算法 3 4 1 Straw算法
  • win10下安装redis

    转载 https www cnblogs com W Yentl p 7831671 html Window 下安装 下载地址 https github com MSOpenTech redis releases Redis 支持 32 位
  • [matlab数字图像处理10]对一副图像进行二值化,ostu算法等

    一 问题描述 对一副图像进行二值化 ostu算法等 二 求解思路 将图像利用imread和rgb2gary后转化为灰度图像 对于直接的二值化 可使用0 5作为阈值 大津法 OTSU 是一种确定图像二值化分割阈值的算法 由日本学者大津于197
  • 苹果手机照片删除了怎么恢复回来

    苹果手机是现代人生活中必备的工具之一 很多小伙伴们会通过它来存储重要的照片和视频 但是 有时候不小心把照片删除了 这可能会导致很多人不知道该怎么办 那些苹果手机照片删除了怎么恢复回来呢 本文将为大家介绍几种简单的方法来恢复被删除的苹果手机照
  • linux脚本学习小记(1)

    linux脚本学习小记 1 1 输出信息 bin bash Program This program is used to show Hello World in screen PATH bin sbin usr bin usr sbin
  • 怎么删除计算机c盘应用,C盘垃圾文件怎么删除,清理系统盘的电脑软件-腾讯电脑管家...

    不知道大家有没有注意过 C盘总是会越用越小 这是因为大部分的系统缓存文件都默认存储在C盘 还有就是系统的升级以及换代 新系统的安装包或者旧系统的残留文件依然会保存在C盘 这也无形中增大了C盘的容量 那么这些垃圾要怎么清理呢 有没有什么软件或
  • Pyecharts Graph 关系图示例

    关系可视化 from pyecharts import options as opts from pyecharts charts import Graph from pyecharts globals import ThemeType i
  • 实现一个函数,判断一个数是不是素数。

    我们先来看一下素数的定义 素数定义为在大于1的自然数中 除了1和它本身以外不再有其他因数 用普通代码实现 define CRT SECURE NO WARNINGS include
  • vs2010中引入boost库

    引言 在vs2010中无法使用C 11中的大多数特性 像mutex互斥锁 要想使用需要引入boost库 下面记录一下boost库引入到vs2010中 实现 分为以下几步 下载boost压缩包 可以采用下面的地址下载适合自己的版本 下载地址
  • List转Map的三种方法

    for循环 import com google common base Function import com google common collect Maps import java util ArrayList import jav
  • 补 day10算法打卡

    232 用栈实现队列 代码 class MyQueue Stack
  • BugkuWeb:game1

    进去后发现是一款游戏 思路就是直接结束游戏 然后去看信息 发现网络监视器中多了score php 发现了可疑的参数score IP sign 这个sign应该在后台代码中被控制的 去审计代码 发现了sign的算法 这个游戏的得分是25 ba
  • 梦幻模拟战手游服务器维护,梦幻模拟战手游无法登陆游戏 服务器异常登录解决方法_游侠手游...

    梦幻模拟战手游 异常登录怎么办 无法登陆游戏怎么办 还没解决的玩家 下面小编就为玩家带来 梦幻模拟战手游 服务器异常登录无法登录解决方法 一起来看看吧 服务器异常登录无法登录解决方法 各位指挥官 真的非常抱歉 服务器目前不稳定 会有部分指挥
  • oracle 创建数据库 create database,使用create database语句创建数据库的详细操作步骤...

    使用create database语句创建数据库的步骤如下 1 指定一个实例标识符SID 2 确保设置了必要的环境变量 3 选择一个数据库管理员验证方法 4 创建一个初始化参数文件 5 只用于windows平台 创建一个实例 6 连接实例
  • 2022全国大学生数学建模竞赛C题思路模型

    1 比赛报名与思路解析 持续更新750967193 2 比赛时间 2022年9月15日18点到2022年9月18日20点 如下为C题思路 C 题 古代玻璃制品的成分分析与鉴别 丝绸之路是古代中西方文化交流的通道 其中玻璃是早期贸易往来的宝贵
  • Java异常, 性能有多差

    在 Java 中 异常通常被认为是成本昂贵的 不应该用于控制控制 本文将证明这个观点的正确性 并验证导致性能问题的原因 Java微基准测试框架 在编写代码评估Java异常的性能成本之前 我们需要搭建一个基准测试环境 测量异常的成本开销 并不
  • 04C++11多线程编程之创建多个线程和数据共享问题分析

    04C 11多线程编程之创建多个线程和数据共享问题分析 1 thread循环创建多个子线程 思想就是使用容器创建多个线程 推荐 以后工作中会使用到 具有实际意义 方便统一管理线程 include