LeetCode 多线程 1116. 打印零与奇偶数
Posted Alex Hub
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 多线程 1116. 打印零与奇偶数相关的知识,希望对你有一定的参考价值。
Ideas
有几个线程就用几个信号量,最先开始的信号量初始化为1,其它初始化为0,然后根据条件判断实现同步。
多线程的问题好多都是:锁自己,解锁别人。
Code
from threading import Semaphore
class ZeroEvenOdd:
def __init__(self, n):
self.n = n + 1
self.zero_lock = Semaphore(1)
self.even_lock = Semaphore(0)
self.odd_lock = Semaphore(0)
# printNumber(x) outputs "x", where x is an integer.
def zero(self, printNumber: 'Callable[[int], None]') -> None:
for i in range(1, self.n):
self.zero_lock.acquire()
printNumber(0)
if i % 2 == 1:
self.odd_lock.release()
else:
self.even_lock.release()
def even(self, printNumber: 'Callable[[int], None]') -> None:
for i in range(2, self.n, 2):
self.even_lock.acquire()
printNumber(i)
self.zero_lock.release()
def odd(self, printNumber: 'Callable[[int], None]') -> None:
for i in range(1, self.n, 2):
self.odd_lock.acquire()
printNumber(i)
self.zero_lock.release()
以上是关于LeetCode 多线程 1116. 打印零与奇偶数的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 多线程练习2(1116. 打印零与奇偶数 / H2O 生成)
LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口