当前位置:网站首页>EA&UML日拱一卒-多任务编程超入门-(9)线程同步
EA&UML日拱一卒-多任务编程超入门-(9)线程同步
2022-07-29 23:42:00 【51CTO】
问题的提出
线程安全的数据类可以提供一种便利的手段来进行线程之间的数据交换,但是这种方法并没有协调两个线程的动作,这一点从输出结果也可以看出:

从输出可以看出,数据交换要么成功,要么就根本不能进行。这就是线程间没有同步的结果。解决这个问题就需要线程同步处理。
示例代码
本例中定义两个互斥量,dataReady和bufferReady。
WriteData方法首先尝试对bufferReady加锁,如果数据类中没有数据时,加锁操作成功,接下来按照正常逻辑写入数据,最后dataReady解锁,为ReadData创造执行条件。
ReadData方法首先尝试对dataReady加锁,如果数据类中存在数据时,加锁操作成功,接下来按照正常逻辑读出数据,最后对bufferReady解锁,为WriteData创造执行条件。
Main函数中创建了两个互斥量,dataReady和bufferReady,用于读数据操作和和写数据操作。
由于最初没有写入的数据,所以首先调用dataReaday.lock操作,使读数据线程处于阻塞状态。
CreateDataTask类没有另外创建互斥量,而是使用构造函数传递的两个互斥量,然后再传递给WriteData函数。
执行结果

写数据操作,读数据操作整齐地间隔排列,同时数据传递全部正确!
写在文章的最后
本公共号的成长需要您的支持!
阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

边栏推荐
- 【无标题】清空吗
- 2022年最新甘肃建筑八大员(材料员)模拟考试试题及答案
- [2023 School Recruitment Questions] Summary of knowledge points and hand-tear code in the written test and interview
- Why does LabVIEW freeze when saving a VI
- C陷阱与缺陷 第5章 库函数 5.4 使用errno检测错误
- 高数下|三重积分习题课|高数叔|手写笔记
- 【无标题】
- Gao Shu Xia|Triple Integral Exercises|Uncle Gao Shu|Handwritten Notes
- JVM初探- 内存分配、GC原理与垃圾收集器
- Brute force recursion to dynamic programming 04 (digital string conversion)
猜你喜欢

29岁从事功能测试被辞,面试2个月都找不到工作吗?

devops学习(八) 搭建镜像仓库---jenkins推送镜像

UE4 制作十字准心+后坐力

Framework 到底该怎么学习?

The latest Gansu construction welder (construction special operation) simulation question bank and answer analysis in 2022

Elephant Swap:借助ePLATO提供加密市场的套利空间

论文精读——YOLOv3: An Incremental Improvement

彻底搞懂kubernetes调度框架与插件

devops学习(三) K8环境部署jenkins
Docker install MySQL8.0
随机推荐
r‘w‘r‘w‘r‘w‘r
devops学习(九) Helm工具--持续部署
High Numbers|Calculation of Triple Integral 3|Uncle High Numbers|Handwritten Notes
2022/7/29 考试总结
Add, delete, modify and query the database
Apache Doris 1.1 特性揭秘:Flink 实时写入如何兼顾高吞吐和低延时
重庆OI 2005 新年好
DFS对树的遍历及一些优化
多商户商城系统功能拆解18讲-平台端商家售后
全国双非院校考研信息汇总整理 Part.3
管理区解耦架构见过吗?能帮客户解决大难题的
[leetcode] 80. Delete duplicates in sorted array II (medium) (double pointer, in-place modification)
devops学习(五) Jenkins 简单完成持续部署
很遗憾,没有一篇文章能讲清楚分布式事务
单片机开发之基本并行I/O口
Getting Started with Sentinel
接口性能测试方案设计方法有哪些?要怎么去写?
指令集数据产品如何设计和实现报表协同系统——基于指令集物联网操作系统的工业协同制造项目开发实践
devops学习(六)Jenkins 持续部署-版本选择
windows下 PHP 安装