线程锁 创建两个线程,其中一个输出1-52,另外一个输出A-Z。要求使用线程锁,使输出为: 12A 34B 56C 78D
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