LeetCode 多线程 1117. H2O 生成
Posted Alex_996
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 多线程 1117. H2O 生成相关的知识,希望对你有一定的参考价值。
Ideas
虽然题目中给出了多种答案,不过我们可以限制一下各个线程输出的顺序,让输出结果的顺序只能是HHO。
我们可以设置两个信号量,hydrogenSema = Semaphore(2)
和oxygenSema = Semaphore(1)
。
先把oxygenSema
给锁上,那么此时就只能访问hydrogen
线程,访问两次之后,相当于输出了HH
,hydrogenSema
信号量为0了,此时释放一个oxygenSema
,那么就会访问oxygen
线程,输出一个O,再释放两个hydrogenSema
。
这样就可以保证这些线程三三成组突破屏障并能立即组合产生一个水分子。
Code
Python
from threading import Semaphore
class H2O:
def __init__(self):
self.hydrogenSema = Semaphore(2)
self.oxygenSema = Semaphore(1)
self.oxygenSema.acquire()
def hydrogen(self, releaseHydrogen: 'Callable[[], None]') -> None:
self.hydrogenSema.acquire()
releaseHydrogen()
if self.hydrogenSema._value == 0:
self.oxygenSema.release()
def oxygen(self, releaseOxygen: 'Callable[[], None]') -> None:
self.oxygenSema.acquire()
releaseOxygen()
self.hydrogenSema.release()
self.hydrogenSema.release()
以上是关于LeetCode 多线程 1117. H2O 生成的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 多线程练习2(1116. 打印零与奇偶数 / H2O 生成)
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口