您当前的位置: 首页 >  leetcode

LeetCode 多线程 1117. H2O 生成

发布时间:2022-01-15 14:49:47 ,浏览量:0

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() 
关注
打赏
1688896170
查看更多评论

暂无认证

  • 0浏览

    0关注

    108697博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.3864s