zoukankan      html  css  js  c++  java
  • python每日一题:锁知识点

     

          锁是python的一大特色,广泛应用在多线程程序中,主要功能是锁定某些变量资源,以便特殊使用。一般应用Lock()函数和Rlock()函数进行锁的操作。锁的特点是1. 任意性,可以定义任意个锁,一把锁可以锁定任何单个线程 ;2.当多个锁对某一线程进行锁定时,只有第一个锁,开锁后release(),其他锁才能继续锁定,否则处于阻塞,等待的状态。下面举一例子。

    题目:采用多线程进行操作,一线程输出1-52,一线程输出A-Z,一线程输出a-z,最终输出结果为12Aa  34Bb 56Cc 78Dd

    # 程序中锁的执行流程如下:
    # t1锁定,t2锁定,
    # 执行线程1(m1函数),执行线程2(m2函数,由于t1锁定,阻塞等待中), 执行线程3(m3函数,由于t2锁定,阻塞等待中)
    # 线程1打印12,t1开锁。执行m2函数,打印A,t2开锁,执行m3函数,打印a,t开锁,循环输出
    
    import threading, time
    import random
    def m1():
        for i in range(1, 52, 2):
            t.acquire()
            print(i, end='')
            print(i + 1, end='')
            t1.release()
    
    def m2():
        for i in range(65, 91):
            t1.acquire()
            print(chr(i), end='')
            t2.release()
    
    def m3():
        for i in range(97, 123):
            t2.acquire()
            print(chr(i))
            t.release()
    
    t = threading.Lock()  # 定义任意三个锁
    t1 = threading.Lock()
    t2 = threading.Lock()
    t1.acquire()  # 必须这样,先打开ti锁,当执行第一个线程m1时,则m2函数中的t1.acquire()悬挂,等待m1线程中的t1.release,才执行print(chr(i),end=‘’)
    t2.acquire()  # 同上
    p1 = threading.Thread(target=m1)
    p2 = threading.Thread(target=m2)
    p3 = threading.Thread(target=m3)
    p1.start()
    p2.start()
    p3.start()
    p1.join()
    p2.join()
    p3.join()
  • 相关阅读:
    二维数组
    找一个数组的最大和的连续子数组(时间复杂度 O(n))(二)
    第一阶段SCRUM冲刺 01
    统计单词
    软件工程--第九周学习进度
    《人件》阅读笔记03
    用户模板和用户场景分析
    软件工程--第八周学习进度
    一维数组代码实现可视化
    《人件》阅读笔记02
  • 原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/10211299.html
Copyright © 2011-2022 走看看