LeetCode 多线程 1114. 按序打印
1114. 按序打印
Ideas
并发执行问题是多线程要解决的经典问题,此题是典型的执行屏障问题,因此我们需要构造几把锁来确保执行顺序。
题目要求按顺序依次执行三个方法,为了保证线程的执行顺序,可以在方法之间创建一些锁,即第二个方法必须在第一个方法之后执行,第三个方法必须在第二个方法之后执行。
有两个依赖关系,所以我们定义两把锁,firstJobDone 和 secondJobDone,分别表示 first() 任务是否执行完毕和 second() 任务是否执行完毕。
我们来分析一下:
- 首先 first() 任务没有依赖关系,也就是说它可以直接执行,执行完之后更新 firstJobDone 变量;
- 然后 second() 任务需要 first() 任务执行完之后才能执行,也就是说 second() 任务执行之前需要检查 firstJobDone 变量,执行完之后更新 secondJobDone 变量;
- 同理,third() 任务需要 second() 任务执行完之后才能执行,也就是说 third() 任务执行之前需要检查 secondJobDone 变量;
Code
Python
from threading import Lockclass Foo:def __init__(self):self.firstJobDone = Lock()self.secondJobDone = Lock()self.firstJobDone.acquire() # 一开始两个任务都没有执行过,先都锁上self.secondJobDone.acquire()def first(self, printFirst: 'Callable[[], None]') -> None:printFirst()self.firstJobDone.release() # first() 任务执行完,解锁def second(self, printSecond: 'Callable[[], None]') -> None:with self.firstJobDone:printSecond()self.secondJobDone.release()def third(self, printThird: 'Callable[[], None]') -> None:with self.secondJobDone:printThird()
LeetCode 多线程 1114. 按序打印相关推荐
- 1114. 按序打印
1114. 按序打印 我们提供了一个类: public class Foo { public void first() { print("first"); } public voi ...
- LeetCode 1114. 按序打印
我们提供了一个类: public class Foo {public void first() { print("first"); }public void second() { ...
- LeetCode 1114 按序打印
https://leetcode-cn.com/problems/print-in-order/ 解决方案 class Foo {private AtomicInteger jobDone = new ...
- LeetCode 多线程 1115. 交替打印FooBar
1115. 交替打印FooBar Ideas 交替锁的设计,两把锁,foo执行的时候把foo lock acquire,print完了只有把bar lock release,这样foo就得等着,然后b ...
- (多线程)leetcode1114. 按序打印 认识AtomicInteger
我们提供了一个类: public class Foo { public void one() { print("one"); } public void two() { p ...
- leetcode 多线程编程
C++多线程学习博客推荐 1 C++11多线程编程----初识 2 c++11多线程编程(二)--理解线程类的构造函数 3 c++11多线程编程(三)--竞争条件与互斥锁 4 ...
- 多线程和单线程 打印数字到100000 的速度对比
import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.Executors; import java.u ...
- 【多线程】给三个字母a、l、i,采用多线程的方式打印alialialiali。。。
目录 1. 题目 2. 解析 1. 使用ReetrankLock和Condition 1. 思路 2. 代码实现 3. 控制台 2. 使用synchronized和AtomicInteger配合 1. ...
- LeetCode 多线程 1116. 打印零与奇偶数
1116. 打印零与奇偶数 Ideas 有几个线程就用几个信号量,最先开始的信号量初始化为1,其它初始化为0,然后根据条件判断实现同步. 多线程的问题好多都是:锁自己,解锁别人. Code from ...
最新文章
- 1.网页学习-开始学习第一步:
- 99% 人看得懂的“熔断”以及最佳实践
- python_环境测试
- Halcon 测量直线和圆环的线宽
- 2. sales quote merge before
- Android系统匿名共享内存(Anonymous Shared Memory)C++调用接口分析(5)
- java视频上传,播放预览,解决苹果手机视频无法预览的问题
- 酷派删除android系统软件,Coolpad酷派8720L哪些系统软件可以删除(精简列表)
- VS2005远程调试
- Xposed插件 - Android一键脱壳工具
- java实践课程感想_JAVA课程学习感想
- excel单元格数字拆分比较
- 求助:tp-link wr720n路由器,想刷打印服务器!
- 第十三课 类族结构的进化
- Office服务器意外响应,Office 所有使用过程中未响应,崩溃,意外关闭
- Basler相机Sdk采图的演示例程(C#)
- 领先华为鸿蒙,国产手机操作系统上载国产手机
- 人工智能-高等数学之微积分篇
- ubuntu Android Studio find in files 的快捷键 与搜狗输入法Linux版 简繁体切换快捷键冲突问题的解决办法【ctrl+ shift+F】
- 访问CentOS7光盘与配置开机挂载光盘
热门文章
- LeetCode 404. 左叶子之和(Sum of Left Leaves)
- 力扣(LeetCode) 35. 搜索插入位置
- Flutter - 弹出底部菜单Show Modal Bottom Sheet
- HDU - 3336 next运用+递推
- Spring Annotation(@Autowire、@Qualifier)
- jquery plugins
- [转]总结使用Unity 3D优化游戏运行性能的经验
- Linux select TCP并发服务器与客户端编程
- 交流电机数字控制系统_敲黑板!新型变频调速控制系统对交流电动机设计的特殊要求...
- 2021巢湖第一中学高考成绩查询,2021年巢湖高中录取分数线是多少及高中排名榜...