zoukankan      html  css  js  c++  java
  • 线程锁 创建两个线程,其中一个输出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
  • 相关阅读:
    Mysql 数据库 表中列的操作
    FreeSWITCH版本更新
    shell脚本58问
    Wireshark 与 Tcpdump
    Mysql 中 int(3) 和 int(11) 的区别
    FreeSWITCH 基础
    FreeSWITCH 学习笔记(一)
    Mysql 复制表数据(表结构相同)
    Centos date 设置自定义时间
    Mysql 主键
  • 原文地址:https://www.cnblogs.com/DJRemix/p/12877366.html
Copyright © 2011-2022 走看看