锁是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()