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

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

在这里插入图片描述

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐