python多线程_thread使用锁

该博客介绍了多线程编程中锁的使用,包括创建锁(allocate_lock)、获取锁(acquire)和释放锁(release)。通过示例展示了如何在Python的_thread模块中使用这些功能,并启动两个线程来执行任务。每个线程在执行前后对锁进行操作,确保线程安全。在main函数中,通过while循环和locked方法检查锁的状态,等待所有线程完成并释放锁后,程序才结束。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【锁】分为【创建锁】【获取锁】【释放锁】

1.allocate_lock函数 【创建锁对象】
2.acquire方法【获取锁】,
3.release方法【释放锁】

完成【锁】这三个功能需要_thread模块中的 1个函数2两个方法

判断锁释放,locked【方法】

下例启动了【两个线程】
1.【创建锁对象】
创建两个【锁】
2.【获取锁】
在运行线程函数前【获取锁】,这时锁处于锁定状态。
启动线程时,将这两个锁对象分别传入两个线程各自的锁对象,
3.【释放锁】
当线程函数执行完后,会调用所对象的release方法【释放锁】
在main()函数的最后定义 【while】循环和【locked()】判断释放方法。
判断这两个锁对象是否已经释放,
当其中一个锁对象没释放while循环就不退出。
当两个锁对象都释放了,那么main()函数结束,程序退出。

import _thread as thread
from time import sleep,ctime

def fun(index,sec,lockNum):
    print("开始执行:",index,"执行时间:",ctime())
    sleep(sec)
    print("执行结束:",index,"执行时间:",ctime())
    lockNum.release()

def main():
    lock1= thread.allocate_lock()
    lock1.acquire()
    thread.start_new_thread(fun,(100,4,lock1))
    lock2=thread.allocate_lock()
    lock2.acquire()
    thread.start_new_thread(fun,(200,2,lock2)) 
    while lock1.locked() or lock2.locked():
        pass

if __name__=="__main__":
    main()

代码讲解

import _thread as thread
from time import sleep,ctime

def fun(index,sec,lockNum):
    #fun(<线程函数,整数类型索引><休眠秒数><锁的对象>)
    print("开始执行:",index,"执行时间:",ctime())
    #输出执行时的时间
    sleep(sec)
    #进行休眠
    print("执行结束:",index,"执行时间:",ctime())
    #输出执行后的时间
    lockNum.release()
    #对锁的对象进行释放

def main():
    lock1= thread.allocate_lock()
    #【创建锁对象】   变量命名为<lock1>
    lock1.acquire()
    #【获取锁】
    thread.start_new_thread(fun,(100,4,lock1))
    #创建一个线程 执行函数          传入参数 (线程函数,元组数据(<整数索引值><秒数><创建的锁对象>))
    lock2=thread.allocate_lock()
    #【创建锁对象】
    lock2.acquire()
    #获取锁
    thread.start_new_thread(fun,(200,2,lock2)) 
    # 创建一个线程 执行函数
    # 判断两个锁是否被释放
    while lock1.locked() or lock2.locked():
        # 当lock1,lock2其中一个未被释放,就死循环(不退出)
        pass

if __name__=="__main__":
    main()

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值