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多线程编程之创建多个线程和数据共享问题分析 的相关文章

  • Java Thread synchronized同步锁简介说明

    转自 Java Thread synchronized同步锁简介说明 下文笔者讲述Thread synchronized同步锁的简介说明 如下所示 java中 每一个对象只有一个同步锁 同步锁放置在对象头上 当我们调用一个对象的synchr
  • 多线程经典案例(生产者--消费者)

    多线程开发中有一个经典的操作案例 就是 生产者 消费者 案例 生产者不的生产产品 消费者不断地取走产品 此案例涉及线程同步 线程休眠 线程等待 线程唤起等操作以及之间是如何搭配使用的方法 示例讲解 本示例模拟中生产者由 厨师 担任 消费者由
  • 说说JUC三个类:CountDownLatch,CyclicBarrier和Semaphore

    目录 CountDownLatch CyclicBarrier Semaphore 总结 在JUC中 有三个工具类来辅助我们进行并发编程 分别是 CountDownLatch CyclicBarrier和Semaphore CountDow
  • 14.QueuedConnection和BlockingQueuedConnection连接方式源码分析

    QT信号槽直连时的时序和信号槽的连接方式已经在前面的文章中分析过了 见https blog csdn net Master Cui article details 109011425和https blog csdn net Master C
  • java中synchronized关键字

    1 synchronized关键字简介 synchronized是java中的一个关键字 在中文中为同步 也被称之为 同步锁 以此来达到多线程并发访问时候的并发安全问题 可以用来修饰代码块 非静态方法 静态方法等 修饰代码块时 给当前指定的
  • java多线程中synchronized同步代码块执行问题

    在高洪岩老师的 java多线程编程核心技术 一书的用同步代码块解决同步方法的弊端一节中 p76页 有这样一句话 当一个线程访问object的一个synchronized同步代码块时 另一个线程依然可以访问该object对象中的非synchr
  • 线程相关面试题

    1 ThreadPoolExecutor 线程池执行 有哪些常用的方法 1 执行线程池 submit excute 2 终止线程池 shutdown 3 判断线程是否终止 isShutdown 4 获取正在运行的线程数 getAcitive
  • fcgi程序两种编写风格

    fcgi进程可以写成单线程的 也可以写成多线程的 单线程就是main函数中有一个死循环 一直等待接受请求 有请求过来时 就处理请求 并返回结果 没有并发性 多线程也分两种模式 一种是main函数起多个线程 每个线程都独立接受请求 另一种是m
  • Disruptor 详解

    Disruptor 详解 想了解一个项目 最好的办法就是 把它的源码搞到本地自己捣鼓 在网上看了 N 多人对 Disruptor 速度的吹捧 M 多人对它的机制分析 就连 Disruptor 官方文档中 也 NB 哄哄自诩 At LMAX
  • 多线程面试总结

    总结 每个对象有一个监视器锁monitor 线程进入同步方法时尝试获取monitor的所有权 其他线程进入阻塞状态 该线程释放monitor的所有权后其他线程重新尝试获取monitor的所有权 只能有一个线程对同步监视器加锁 1 多线程的问
  • 多线程实现事务回滚

    多线程实现事务回滚 特别说明CountDownLatch CountDownLatch的用法 CountDownLatch num 简单说明 主线程 mainThreadLatch await 和mainThreadLatch countD
  • java多线程使用教程

    文章目录 如何使用多线程 继承Thread类 实现Runnable接口 线程的生命周期 线程同步 线程间通信 shutdown 方法的重要性 如何使用多线程 在Java中 创建多线程的方式有两种 一种是继承Thread类 另一种是实现Run
  • Java使用多线程导入数据到Oracle中

    Oracle中的设置 多线程导入数据到Oracle中 如果是自己设置主键的值 那么肯定会遇到主键冲突的问题 例如线程A计算出的id为10 max id 1 在A线程还没有完成导入时线程B用相同办法得到的id也是10 这时两个线程都请求插入数
  • 多线程太可怕了

    今天发现了一个多线程引起的bug 然后进一步体会到 这东西太容易出问题了 首先要说明的是 出问题的代码可不是一般人写的 是由一个叫EPAM systems的世界知名外包公司的人写的 这些java程序员个个经验丰富 心高气傲 貌似base在乌
  • WEB-7-多线程

    多线程 一 背景 二 认识线程 Thread 1 理解 2 进程和线程的区别 高频面试题 3 使用代码创建多线程 三 线程的相关操作 1 创建线程 1 方法一 继承 Thread 类 2 方法二 实现 Runnable 接口 3 其它方法
  • java中什么是并发,如何解决?

    多个进程或线程同时 或着说在同一段时间内 访问同一资源会产生并发问题 银行两操作员同时操作同一账户就是典型的例子 比如A B操作员同时读取一余额为1000元的账户 A操作员为该账户增加100元 B操作员同时为该账户减去 50元 A先提交 B
  • JAVA使用线程池查询大批量数据

    前言 在开发过程中可能会碰到某些独特的业务 比如查询全部表数据 数据量过多会导致查询变得十分缓慢 虽然在大多数情况下并不需要查询所有的数据 而是通过分页或缓存的形式去减少或者避免这个问题 但是仍然存在需要这样的场景 比如需要导出所有的数据到
  • 线程池用例

    线程池逻辑类 public class TaskExecutorService private final ExecutorService pool private final ThreadPoolExecutor pool private
  • python网络爬虫实战——实时抓取西刺免费代理ip

    参考网上高手示例程序 利用了多线程技术 Python版本为2 7 coding utf8 import urllib2 import re import threading import time rawProxyList checkedP
  • Java多线程 - 线程池常用容量设置

    线程执行方式 线程的执行是由CPU进行调度的 一个CPU在 同一时刻只会执行一个线程 操作系统利用了时间片轮转的方式 CPU给每个任务都服务一定的时间 然后把当前任务的状态保存下来 再加载下一个任务的状态后 继续服务下一个任务 任务的保存及

随机推荐

  • 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