#交替打印 FooBar
import threading
class FooBar(object):
def __init__(self,n):
self.n = n
self.A = threading.Lock() #A锁
self.B = threading.Lock() #B锁
self.B.acquire() #加锁
def foo(self, printFoo):
"""
:type printFoo: method
:rtype: void
"""
for i in xrange(self.n):
self.A.acquire() #加锁
# printFoo() outputs "foo". Do not change or remove this line.
printFoo()
self.B.release() #放锁
def bar(self, printBar):
"""
:type printBar: method
:rtype: void
"""
for i in xrange(self.n):
self.B.acquire()
# printBar() outputs "bar". Do not change or remove this line.
printBar()
self.A.release()
#1116. 打印零与奇偶数
import threading
class ZeroEvenOdd:
def __init__(self, n):
self.n = n
# 创建3把锁
self.zeroLock = threading.Lock()
self.evenLock = threading.Lock()
self.oddLock = threading.Lock()
self.evenLock.acquire() # 偶数print加锁
self.oddLock.acquire() # 奇数print加锁
# printNumber(x) outputs "x", where x is an integer.
def zero(self, printNumber):
for i in range(1, self.n + 1, 1):
self.zeroLock.acquire() # 0 加锁
printNumber(0)
if i % 2 == 0:
self.evenLock.release()
else:
self.oddLock.release()
def even(self, printNumber):
for i in range(1, self.n + 1, 1):
if i % 2 == 0:
self.evenLock.acquire()
printNumber(i)
self.zeroLock.release()
def odd(self, printNumber):
for i in range(1, self.n + 1, 1):
if i % 2:
self.oddLock.acquire()
printNumber(i)
self.zeroLock.release()