LeetCode 多线程 1116. 打印零与奇偶数

Posted Alex Hub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 多线程 1116. 打印零与奇偶数相关的知识,希望对你有一定的参考价值。

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(多线程)- 题集

LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口

LeetCode——多线程问题汇总

面试题:用程序实现两个线程交替打印 0~100 的奇偶数

LeetCode1114. 按序打印[多线程] 6种解法