import threading
import time
def f1():
"""
执行f1的时候需要锁住lock1,因此此前lock1必须处于已解锁状态,否则阻塞
只有当执行完毕一次f1之后,才能解锁lock2,f2才能继续执行
"""
for i in range(1, 52, 2):
# 锁住lock1,如果此时lock1不是处于未上锁状态,则等待lock1解锁之后才能往下进行
lock1.acquire()
print(i, end='')
print(i+1, end='')
# 解锁lock2
lock2.release()
def f2():
"""
执行f2的时候需要锁住lock2,因此此前lock2必须处于已解锁状态,否则阻塞
只有当执行完毕一次f2之后,才能解锁lock1,f1才能继续执行
"""
for i in range(26):
# 锁住lock2,如果此时lock2不是处于未上锁状态,则等待lock2解锁之后才能往下进行
lock2.acquire()
print(chr(i+ord('A')))
lock1.release()
if __name__ == '__main__':
# 建立两个线程锁
lock1 = threading.Lock()
lock2 = threading.Lock()
# 创建两个线程
f1_thread = threading.Thread(target=f1)
f2_thread = threading.Thread(target=f2)
# 先锁住lock2,也就是先不让f2执行
lock2.acquire()
# 当f1执行1次之后,lock2才会解锁f2才能执行
f1_thread.start()
f2_thread.start()
# 输出
12A
34B
56C
78D
910E
1112F
1314G
1516H
1718I
1920J
2122K
2324L
2526M
2728N
2930O
3132P
3334Q
3536R
3738S
3940T
4142U
4344V
4546W
4748X
4950Y
5152Z