![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode 多线程练习题
LeetCode 多线程练习题
大风车滴呀滴溜溜地转
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
展开
-
LeetCode 多线程 1117. H2O 生成
1117. H2O 生成Ideas虽然题目中给出了多种答案,不过我们可以限制一下各个线程输出的顺序,让输出结果的顺序只能是HHO。我们可以设置两个信号量,hydrogenSema = Semaphore(2)和oxygenSema = Semaphore(1)。先把oxygenSema给锁上,那么此时就只能访问hydrogen线程,访问两次之后,相当于输出了HH,hydrogenSema信号量为0了,此时释放一个oxygenSema,那么就会访问oxygen线程,输出一个O,再释放两个hydroge原创 2022-01-15 14:49:47 · 998 阅读 · 0 评论 -
LeetCode 多线程 1114. 按序打印
1114. 按序打印Ideas并发执行问题是多线程要解决的经典问题,此题是典型的执行屏障问题,因此我们需要构造几把锁来确保执行顺序。题目要求按顺序依次执行三个方法,为了保证线程的执行顺序,可以在方法之间创建一些锁,即第二个方法必须在第一个方法之后执行,第三个方法必须在第二个方法之后执行。有两个依赖关系,所以我们定义两把锁,firstJobDone 和 secondJobDone,分别表示 first() 任务是否执行完毕和 second() 任务是否执行完毕。我们来分析一下:首先 first(原创 2022-01-08 13:09:56 · 311 阅读 · 1 评论 -
LeetCode 多线程 1116. 打印零与奇偶数
1116. 打印零与奇偶数Ideas有几个线程就用几个信号量,最先开始的信号量初始化为1,其它初始化为0,然后根据条件判断实现同步。多线程的问题好多都是:锁自己,解锁别人。Codefrom threading import Semaphoreclass ZeroEvenOdd: def __init__(self, n): self.n = n + 1 self.zero_lock = Semaphore(1) self.even_lo原创 2021-07-18 15:01:15 · 361 阅读 · 0 评论 -
LeetCode 多线程 1115. 交替打印FooBar
1115. 交替打印FooBarIdeas交替锁的设计,两把锁,foo执行的时候把foo lock acquire,print完了只有把bar lock release,这样foo就得等着,然后bar执行的时候把bar lock acquire,print完了之后把foo lock release,这样就能交替打印foo和bar了。CodePythonfrom threading import Lockclass FooBar: def __init__(self, n):原创 2021-07-15 09:29:40 · 342 阅读 · 0 评论