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()
原文地址:https://www.cnblogs.com/xuehaiwuya0000/p/10211299.html