我是一个线程(下)

多线程,两个线程写,一个线程读 多线程,两个线程写,一个线程读,读完删除,(读完删除,再写(注释掉的部分),当两个写的线程没有写,就读的线程一直读写删) 1、采用thread类 #include <iostream> #include <thread> #include <Windows.h> #include <mutex> using namespace std; mutex mu; //线程互斥对象 struct A1 { int a; strin 阅读详情

接前两篇文章:我是一个线程(上) (中) , 回复“我是一个线程”查看

其实这次遇险我应该能够预想到才对, 太大意了。 

前几天我处理过一些从http 发来的存款和取款的包裹, 老线程0x6900 特意嘱咐我:

 "处理这些包裹的时候要特别小心, 你得一定要先获得一把锁, 在对账户存款或者取款的时候一定要把账户给锁住, 要不然别的线程就会在你等待的时候趁虚而入,搞破坏, 我年轻那会儿很毛糙,就捅了篓子" 

为了“恐吓”我, 好心的0x6900还给了我两个表格:

1. 没有加锁的情况

0?wx_fmt=png2. 加锁的情况

0?wx_fmt=png

我看的胆颤心惊, 原来不加锁会带来这么严重的事故。

从此以后看到存款,取款的包裹就倍加小心, 还好,没有出过事故。 

今天我收到的一个包裹是转账, 从某著名演员的账号给某著名导演赚钱, 具体是谁我就不透漏了, 数额可真是不小

我按照老线程的吩咐, 肯定要加锁啊, 先对著名演员账号加锁, 在对著名导演账号加锁。

可我万万没想到的是, 还有一个线程,对,就是0x7954,  竟然同时在从这个导演到往这个演员转账。 

于是乎,就出现了这么个情况:

0?wx_fmt=png

刚开始我还不知道什么情况, 一直坐在等待车间傻等, 可是等的时间太长了, 长达几十秒 ! 我可从来没有经历过这样的事件。 

这时候我就看到了线程0x7954 , 他悠闲的坐在那里喝咖啡, 我和他聊了起来:

“哥们, 我看你已经喝了8杯咖啡了, 怎么还不去干活?”

“你不喝了9杯茶了吗?” 0x7954 回敬到。

“我在等一个锁, 不知道哪个孙子一直不释放”

“我也在等锁啊,我要是知道哪个孙子不释放锁我非揍死他不可 ” 0x7954 毫不示弱。 

我偷偷的看了一眼, 这家伙怀里不就抱着我正在等的 某导演的锁嘛?

很明显, 0x7954 也发现了我正抱着他正在等待的锁。 

很快我们两个就吵了起来, 互不相让:

"把你的锁先给我, 让我先做完"

"不行, 从来都是做完工作才释放锁, 现在绝对不能给你"

从争吵到打起来, 就那么几秒钟的事儿。 

更重要的是, 我们俩不仅仅持有这个著名导演和演员的锁, 还有很多其他的锁, 导致等待的线程越来越多, 围观的人们把屋子都挤满了。

最后事情真的闹大了, 我从来没见过终极大boss "操作系统" 也来了。 

大Boss毕竟是见多识广, 他看了一眼, 哼了一声 , 很不屑的说:

 "又出现死锁了"

"你们俩要Kill掉一个, 来吧, 过来抽签 "

这一下子把我给吓尿了, 这么严重啊!

我战战兢兢的抽了签,打开一看, 是个"活"字。 

唉,小命终于保住了。 

可怜的0x7954 被迫交出了所有的资源以后, 很不幸的被kill掉, 消失了。

我拿到了导演的锁, 可以开始干活了。

大Boss操作系统如一阵风似的消失了, 身后只传来他的声音:

记住, 我们这里导演>演员,  无论认识情况都要先获得导演的锁

由于不仅仅是只有导演和演员, 还有很多其他人, Boss留下了一个表格,  里边是个算法, 用来计算资源的大小, 计算出来以后,永远按照从大到小的方式来获得锁:

0?wx_fmt=png
0?wx_fmt=png

我回到线程池, 大家都知道了我的历险, 围着我问个不停。 

凶神恶煞的线程调度员把大Boss的算法贴到了墙上。 

每天早上, 我们都得像无节操的房屋中介, 美容美发店的服务员一样, 站在门口,像被耍猴一样大声背诵:

"多个资源加锁要牢记, 一定要按Boss的算法比大小, 然后从最大的开始加锁"

--------------------------------------------------------

又过了很多天, 我和其他线程们发现了一个奇怪的事情:包裹的处理越来越简单

不管任何包裹,不管是登录, 浏览,存钱..... 处理的步骤都是一样的, 返回一个固定的html页面

有一次我偷偷的看了一眼, 上面写着:

"本系统将于今晚 00:00 至4:00 进行维护升级, 给你带来的不便我们深感抱歉"

我去告诉了老线程0x6904,  他叹了一口气说:

"唉, 我们的生命也到头了, 看来马上就要重启系统, 我们就要消失了, 再见吧兄弟。"

系统重启的那一刻终于到来了。 

我看到屋子里的东西一个个的不见了, 等待车间,就绪车间,甚至CPU车间都慢慢的消失了。

我身边的线程兄弟也越来越少, 最后只剩我自己了。 

我在空旷的原野上大喊: 还有人吗?

无人应答。

我们这一代线程池完成了使命。

下一代线程池将很快重生。

(完)

-----------------------------------------------------------------------------

“码农翻身” 公共号(coderising) : 由工作15年的前IBM架构师创建,分享编程和职场的经验教训。


回复下面的关键字,查看更多文章

牛人 键盘侠 留学 读书 调试 烂代码 小白 培训

数据结构 代码腐化 无聊 迷茫 刚工作 死锁 简历  

HTTP Session XML AJAX TOMCAT 反射 JUnit

开源 职业发展  假如我是老师  学习Java  外包

自学  OO  我是一个线程

长按二维码, 关注"码农翻身"

0?wx_fmt=jpeg

Deepfake检测模型-PyDeepFakeDet项目复现实验报告-深度学习 该实验是对于https://github.com/wangjk666/PyDeepFakeDet模型的复现。PyDeepFakeDet 是一款集成的、可扩展的 Deepfake 检测工具。目标是提供最先进的 Deepfake 检测模型以及用于在常用 Deepfake 数据集上训练和评估新模型的接口。 阅读详情

相关推荐

【MediaPipe实战】从零构建实时人脸关键点检测与表情分析系统

本文详细介绍了如何使用MediaPipe框架从零构建实时人脸关键点检测与表情分析系统。通过Python代码实现,系统能够精准检测468个3D人脸关键点,并实时分析用户表情,适用于智能交互应用。文章包含环境配置、核心实现、可视化技巧及性能优化等实战内容,帮助开发者快速掌握深度学习在计算机视觉中的应用。

weixin_30836759的博客 73

我是一个线程(修订版)

第一回 初生牛犊我是一个线程,我一出生就被编了个号:0x3704,然后被领到一个昏暗的屋子里,在这里我发现了很多和我一模一样的同伴。我身边的同伴0x6900 待的时间比较...

码农翻身 852

JavaFX - 动画

JavaFX 动画

思你日度难眠 1603

我是一个线程

简单易懂讲线程 来自:码农翻身(微信号:coderising) 作者:IBM刘欣

mon_star的博客 486

TI IWR 6843 ISK 毫米波雷达开箱测试

TI IWR6843 ISK毫米波雷达上手体验,教程十分详细,对于新手很友好。

qq_57061492的博客 4037

暗黑地牢modfiles.txt文件生成工具

暗黑地牢modfiles.txt文件生成工具引言方法工具源码基本步骤 引言 玩过暗黑地牢mod,并手动修改了mod中文件的话,如果不同步修改modfiles.txt文件,就会引起各种问题,典型的比如马车刷不出mod英雄,商店和boss都不再出现mod饰品,怪物贴图丢失出现黑块等,要解决这个问题,就要修正mod文件夹下的modfiles.txt文件 方法 针对修改量大小,一般有几种方法: 如果修改较少,而且你还记得修改了哪几个文件,找到这几个文件,右键属性,查看大小,要用的是括号里面的字节数,然后打开mod

lttclaw_的专栏 5003

我是一个线程(上)

我是一个线程,我一出生就被编了个号: 0x3704, 然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴。我身边的同伴0x6900 待的时间比较长,...

码农翻身 2402

银河麒麟(ky10)x86与arm双架构下编译zlmediakit的实战指南

本文提供了在银河麒麟(ky10)操作系统上,针对x86与arm双架构编译部署流媒体服务器zlmediakit的完整实战指南。文章详细阐述了从环境准备、依赖安装、代码获取到编译构建与测试的全过程,重点解析了两种CPU架构下的关键差异与注意事项,帮助开发者高效完成国产化平台上的流媒体服务搭建。

weixin_29306875的博客 101

java 在一个线程中启动另一个线程_JAVA:在一个线程中启动另外一个线程

##常见package hellojava;import java.util.logging.Level;import java.util.logging.Logger;public class HelloJava {static class TestTask implements Runnable {private String taskName;public TestTask(String t...

weixin_42360285的博客 2045

OTFS 消息传递算法信号检测【附matlab代码详解】

OTFS 消息传递算法方面的一些浅浅理解。

Cuby的博客 4013

delphi fmx android 自动更新(一)

所以,如果是http 则,manifest.xml application 下,https无需添加。增加android:usesCleartextTraffic="true",不然无法使用http下载东西。1,REQUEST_INSTALL_PACKAGES 权限。4,WRITE_EXTERNAL_STORAGE 权限。3,READ_EXTERNAL_STORAGE 权限。一般是从http下载安装包 apk。2,INTERNET 权限。sFile为apk包路径。

全粘工程师 550

线程问题—一个线程怎么调出另外一个线程的结果。

问题:建两线程,线程1进行计算1*1+~+99*99,线程2打印出线程1名字,每隔段时间读取一次线程1的计算结果? 1 public class Other{ 2 public static volatile int sum; 3 public static void main(String[] args){ 4 Thread t...

aixirang3421的博客 516

SAP CRP能力计划详细说明操作及相关配置

2、求助朋友同事的希望破灭后,网上找了资料发现在百度搜索的资料基本都是没有说明白什么才产能计划,都没有详细的操作说明,然后用google去搜索了一些相关的文章,好像也没有详细的文章。然后也去SAP的官网搜索了相关的文章,都是文字性的表述,对系统的配置都没有很大的帮助,很久之前有记得在隐身人的博客中有提到CRP的能力计划的文章,然后试着去找了一下相关的文章。5、首先产能排产肯定涉及的就是是能力的问题,能力第一个能想到的就是工作中心中的能力页签,在流程制造中也叫资源,其实都是一个东西。

我小时候很黑的博客 4520

两个线程,一个线程输出1,一个线程输出2,循环输出

/** * 两个线程,一个线程输出1,一个线程输出2, * * @author ffr@cnic.cn * */ public class SleepAndWaitThread2 { public static void main(String[] args) { OneThread one = new OneThread(); TwoThread two = new Tw

专注 7973

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

从一个线程中给另一个线程发送通知

当需要线程等待某个事物时,可以创建一个condition对象,然后通过这个对象来通知那些等待的线程。 #include #include #include #include #include #include class Request { }; // A simple job queue class; don't do this, use std::q

fkfang的专栏 2898

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java使用一个线程监控另一个线程

// java使用一个线程监控另一个线程 // 这里写的是例子,实际应用是一个线程监控主线程某个属性的值 // 当值发生改变时,做出相应的业务逻辑 public class B extends Thread { static int num = 1; public static void main(String[] args) throws Exception { B thread = new B(); thread.start(); whi

qq_37739437的博客 1917

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C#在一个线程中操作另一个线程的控件

C#在一个线程中操作另一个线程的控件本文摘自:拾金者(http://www.xkde.com) 详细出处参考:http://www.xkde.com/ComContent-149-7466.aspx默认情况下,C#不允许在一个线程中直接操作另一个线程中的控件,这是因为访问windows窗体控件本质上不是线程安全的.如果有两个或多个线程操作某一控件的状态,则可能会迫使该控件进入一种不一致的状态.

sx811125的专栏 2122

一个http请求就是一个线程吗?Java的服务是每收到一个请求就新开一个线程来处理吗?

一个http请求就是一个线程吗? 答案是:是,一个http请求,就是一个线程。 tomcat连接数线程数 java的服务是每收到一个请求就新开一个线程来处理吗?tomcat呢? 总结 http请求,就是来银行办理业务的用户。tomcat,就是银行。一个线程,就是开辟一个窗口。 线程是共享cpu的,那么多线程比单线程,能提升处理速度吗? 好比,一个窗口(一个cpu),三个人来办理业务。单线程:一个办完一个办。多线程:大家轮着办,我一会给你办,你会儿给他办。 但是单线程,..

拯救世界的光太郎 1万+

Android一个APP里面最少有几个线程

这个线程是否也是每个进程所必须包含的线程。后来我查看了一下Daemons创建的过程,能确定的是Android启动一个APP最少包含ReferenceQueueDaemon线程、FinalizerDaemon线程、FinalizerWatchdogDaemon线程、HeapTaskDaemon线程,以及在ActivityThread中开启的主线程。的源码发现 startHeapTaskProcessor()、runHeapTasks()均是native方法。页面的工程,线程包含以下的这些。

猿小蔡的博客 2220

多线程 一个线程控制另一个线程

多线程 一个线程控制另一个线程 要求: (1)在main方法中启动两个线程 (2)第1个线程循环随机打印100以内的整数 (3)直到第2个线程从健盘读取了“Q”命令。 /* (1)在main方法中启动两个线程 (2)第1个线程循环随机打印100以内的整数 (3)直到第2个线程从健盘读取了“Q”命令。 */ public class Homework01{ public static void main(String[] args){ A a = new A(); B b = new B(a

weixin_43806049的博客 1561

c++一个线程发消息到另外一个线程_自己实现一个简单的线程池

文章来源:https://blog.youkuaiyun.com/qq877728715/article/details/107632454一.本文目的自己动手写一个的线程池,同时会了解到线程池的工作原理,以及如何在工作中合理的利用线程池。二.对线程池的认识线程池是什么线程池的概念是初始化线程池时在池中创建空闲的线程,一但有工作任务,可直接使用线程池中的线程执行工作任务,任务执行完成后又返回线程池中...

weixin_39817176的博客 1005

一个线程控制另一个线程的暂停或启动

MainTest类中可以控制线程的暂停或继续运行。 public class MainTest { /** * 这个线程操作另一个线程的暂停或开始 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Thread1 th1 = new T

ShyBoyes的专栏 6672

同一线程组下的线程,一个线程的异常会影响其他线程运行么?

测试demo: public class Test { static class MyThread extends Thread { private String number; public MyThread(ThreadGroup group, String name, String number) { super(group, name); this.number = number; }

硅脂味咖啡的博客 3466
上一篇: 我是一个线程(中)
下一篇: 学好编程必备的一个品质你知道吗?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值