-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path1116.py
More file actions
28 lines (25 loc) · 859 Bytes
/
1116.py
File metadata and controls
28 lines (25 loc) · 859 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from threading import Lock
class ZeroEvenOdd:
def __init__(self, n):
self.n = n
self.lz, self.le, self.lo = [Lock() for i in 'zzz']
self.le.acquire()
self.lo.acquire()
def zero(self, printNumber: 'Callable[[int], None]') -> None:
for i in range(self.n):
self.lz.acquire()
printNumber(0)
if i % 2:
self.le.release()
else:
self.lo.release()
def even(self, printNumber: 'Callable[[int], None]') -> None:
for i in range(2, self.n + 1, 2):
self.le.acquire()
printNumber(i)
self.lz.release()
def odd(self, printNumber: 'Callable[[int], None]') -> None:
for i in range(1, self.n + 1, 2):
self.lo.acquire()
printNumber(i)
self.lz.release()