【锁】分为【创建锁】【获取锁】【释放锁】
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()