线程锁 创建两个线程,其中一个输出152,另外一个输出AZ。要求使用线程锁,使输出为: 12A 34B 56C 78D Y

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
原文地址:https://www.cnblogs.com/DJRemix/p/12877366.html