中级农民
- 积分
- 102
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2019-3-4
- 最后登录
- 1970-1-1
|
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
原题leetcode 1195,https://leetcode.com/problems/fizz-buzz-multithreaded/
我的解法能n=14时候work,但到了15就不work了,看不出哪里的问题,请教各位!
- from threading import Lock
- class FizzBuzz:
- def __init__(self, n: int):
- self.n = n
- self.lock1 = Lock()
- self.lock2 = Lock()
- self.lock3 = Lock()
- self.lock4 = Lock()
-
- self.lock1.acquire()
- self.lock2.acquire()
- self.lock3.acquire()
- self.lock4.acquire()
- # printFizz() outputs "fizz"
- def fizz(self, printFizz: 'Callable[[], None]') -> None:
- for i in range(self.n//3):
- self.lock2.acquire()
- printFizz()
- self.lock1.release()
- # printBuzz() outputs "buzz"
- def buzz(self, printBuzz: 'Callable[[], None]') -> None:
- for i in range(self.n//5):
- self.lock3.acquire()
- printBuzz()
- self.lock1.release()
- # printFizzBuzz() outputs "fizzbuzz"
- def fizzbuzz(self, printFizzBuzz: 'Callable[[], None]') -> None:
- for i in range(self.n//15):
- self.lock4.acquire()
- printFizzBuzz()
- self.lock1.release()
- # printNumber(x) outputs "x", where x is an integer.
- def number(self, printNumber: 'Callable[[int], None]') -> None:
- for i in range(1, self.n+1):
- if i % 3 == 0 and i % 5 != 0:
- self.lock2.release()
- self.lock1.acquire()
- elif i % 5 == 0 and i % 3 != 0:
- self.lock3.release()
- self.lock1.acquire()
- elif i % 5 == 0 and i % 3 == 0:
- self.lock4.release()
- self.lock1.acquire()
- else:
- printNumber(i)
复制代码 |
上一篇: 一个类似union find题目请教下一篇: 狗家高频1055的解法没看懂
|