多线程中的队列不一定需要线程安全

两个线程,主线程中update

update(){

  while(queue.count >0){

    //process....

    queue.pop()

  }

}

子线程中:

queue.enqueue(data)

这样做是没有问题的:

主线程:

pop (){                                                     enqueue() {

  1, delete node;                                      3,  add node

  2, count = count - 1;                              4, count = count + 1

}                 }

代码以以下任意方式执行都是没有问题的(1,2,3,4与if(queue.count >0)以任意方式排列):

1,2,if(queue.count > 0),  3,4   //数据延迟了一帧才被执行,是线程本身慢了,就算加了也一样会延迟

1,2,3,if(queue.count > 0),,4   //数据延迟了一帧才被执行,是两个线程同时执行导致的,如果加锁了就不会有延迟

1,2,3,4,if(queue.count > 0),  //无延迟

1,3,2,if(queue.count > 0),, 4   //数据延迟了一帧才被执行,是两个线程同时执行导致的,如果加锁了就不会有延迟

1,3,2,4,if(queue.count > 0),  //无延迟

。。。

唯一的问题是:可能延迟一帧执行,这一般而言不是问题。

以上只是理论推测,不知是否真正正确

posted on 2018-11-03 13:05 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

多线程中的队列不一定需要线程安全相关推荐

  1. python 主程序等待 子线程_Python多线程中主线程等待所有子线程结束的方法

    Python多线程中主线程等待所有子线程结束的方法 发布时间:2020-07-30 14:39:04 来源:亿速云 阅读:77 作者:小猪 这篇文章主要讲解了Python多线程中主线程等待所有子线程结 ...

  2. C++:多线程中的小白(2)线程启动、结束、创建线程、join、detach

    目录 一.范例演示:线程运行的开始和结束 二.其他创建线程的手法 一.范例演示:线程运行的开始和结束 (1)thrad (2)join()函数 (3)detach()函数 (4)joinable()函 ...

  3. C++:多线程中的小白(3)线程传参详解

    (1)传递临时对象作为线程参数 (2)传递类对象智能指针作为线程参数 (3)用成员函数指针做线程函数 在实际工作中我们要创建的线程可能不止一个,比如说我们要创建10个,编号从0到9,这10个线程会根据 ...

  4. 并发容器(J.U.C)中的队列类

    JUC包下的容器类分为两部分,一部分是并发集合类,一部分是并发队列类,其中并发集合类可以解决我们集合使用过程中的多线程并发问题,而并发队列类则主要被当做阻塞队列使用,是线程池中的关键参数之一. 文章目 ...

  5. 队列在多线程中的应用

    前言 最近遇到一个问题:有一个几十万行的数据文件,需要提取每一行中的特定字段去请求数据.每一次请求数据可能花费100毫秒的时间,这样的话,如果我们单线程顺序读取文件,发送请求,时间开销很大.如何缩短时 ...

  6. 多线程中的应用之队列(queue)

    队列queue 多应用在多线程中,对于多线程访问共享变量时,队列queue是线程安全的. 从queue队列的实现来看,队列使用了1个线程互斥锁(pthread.Lock()),以及3个条件标量(pth ...

  7. 秒杀多线程第十六篇 多线程十大经典案例之一 双线程读写队列数据

    本文配套程序下载地址为:http://download.csdn.net/detail/morewindows/5136035 转载请标明出处,原文地址:http://blog.csdn.net/mo ...

  8. Linux系统中消息队列,共享内存、信号和线程的基本操作使用方法

    Linux系统中消息队列,共享内存.信号和线程高级操作 第十一章 消息队列 10.1消息队列定义 10.2 消息队列特点 10.3 key值 10.4 创建消息队列 10.4.1 发送消息 10.4. ...

  9. (Erlang语言)运行时中的无锁队列及其在异步线程中的应用

    本文首先介绍 Erlang 运行时中需要使用无锁队列的场合,然后介绍无锁队列的基本原理及会遇到的问题,接下来介绍 Erlang 运行时中如何通过"线程进度"机制解决无锁队列的问题, ...

最新文章

  1. 用python自动化做ecshop测试_Python-自动化测试面试
  2. qmake以及makefile总结
  3. ajaxfileupload带多个参数上传方法
  4. 解决Delphi7的自带的UTF-8编码转换函数BUG
  5. org.apache.shiro.ini不存在 shiro不能导包
  6. C语言如何使用函数交换两个变量的值
  7. Python读取文件内容为字符串的方法(多种方法详解)
  8. 协鑫集成“熄灯工厂”装上ET工业大脑,验证订单命中率可提高3.99%
  9. 数据库的增删改查和使用流程
  10. matlab STFT从时频图找异常噪声的频率
  11. 多进程event通信
  12. h5页面保存img_如何设计H5编辑器中的模版库并实现自动生成封面图
  13. 最好的移动安全计划:先检查风险 再对症下药
  14. 对比了上百个python程序员的开发习惯,这10个方法最节省时间!
  15. Python连接mysql密码用密文_druid配置数据库连接使用密文密码
  16. 问你觉得iOS7为什么要扁平化,扁平化和之前的比有什么优势
  17. 机器学习基础:Dice Loss(Machine Learning Fundamentals: Dice Loss)
  18. SQL查询优化工具--EverSQL
  19. qq服务器拒绝发送文件什么意思,QQ提示服务器拒绝发送离线文件是什么意思 - 卡饭网...
  20. 桌面没计算机图标不见了怎么办,桌面图标不见了怎么办,详细教您电脑桌面图标不见了怎么办...

热门文章

  1. 笔记-项目立项管理-项目的可行性研究-可行性研究内容
  2. MyBatis中动态sql实现传递多个参数并使用if进行参数的判断和实现like模糊搜索以及foreach实现in集合
  3. 数据库建模工具PowerDesigner的安装与汉化和破解
  4. Java中获取数据库中两个时间的相差秒数
  5. Linux上压缩目录以及目录下的所有文件
  6. SSM关联码表的多个字段显示中文流程以及sql写法
  7. Tkinter的Radiobutton组件
  8. netty4搭建简单的http服务器
  9. gsea富集分析结果怎么看_怎么看肝功能检验结果?
  10. 海龟交易代码java_海龟交易算法,实现量化交易(1)数据获取