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
  • 相关阅读:
    ps cc 2018安装
    eclipse 快速添加 set , get 方法
    电脑设置以太网
    C# 获取web.config配置文件内容
    C# @Page指令中的AutoEventWireup,CodeBehind,Inherits
    未能正确加载“Microsoft.VisualStudio.Implementation.EditorPackage”包
    C# 实现MD5加密
    mutex 简单介绍
    select @@IDENTITY
    C# vs2012创建报表
  • 原文地址:https://www.cnblogs.com/DJRemix/p/12877366.html
Copyright © 2011-2022 走看看