Python3中最常使用的5种线程锁有哪几个?
线程安全是什么意思呢?简单来说就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他人不能再对其进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问,本篇文章总结了Python3中几种常用的线程锁,请看下文:
锁是Python提供给我们能够自行操控线程切换的权利,使用锁可以让线程的切换变得有序,一旦线程的切换变得有序后,各个线程之间对数据的访问、修改就变得可控,所以如果要想保证线程安全,就必须使用锁。
threading模块中提供了5种最常见的锁,下面按功能可以这么划分:
同步锁:lock(一次只能放行一个);
递归锁:rlock(一次只能放行一个);
条件锁:condition(一次可以放行任意个);
事件锁:event(一次全部放行);
信号量锁:semaphore(一次可以放行特定个);
1、Lock()同步锁
有同步锁和互斥锁两种,互斥指在同一时刻,某一资源仅能有一个访问者访问其,具有唯一性和排他性,但它无法限制访问者对资源的访问数据,即访问是无序的;而同步指在互斥的基础上,通过其他机制实现访问者对资源的有序访问,其实它是互斥的一种更为复杂的实现,因为它在互斥的基础上实现了有序访问的特点。
2、RLock()递归锁
是同步锁的一个升级版本,在同步锁的基础上可以做到连续重复使用多次acquire()后再重复使用多次release()的操作,但一定要注意加锁次数和解锁次数必须一致,否则容易出现死锁现象。
3、Condition()条件锁
条件锁是在递归锁的基础上增加了能够暂停线程运行的功能,并且我们可以使用wait()与notify()来控制线程执行的个数,需要注意的是,条件锁可以自由设定一次放行几个线程。
4、Event()事件锁
是基于条件锁来做的,它与条件锁的区别在于一次只能放行全部,不能放行任意个数量的子线程继续运行,可以将事件锁看为红绿灯,当红灯时所有子线程都暂停运行,并进入等待状态,当绿灯时所有子线程都恢复正常运行。
5、Semaphore()信号量锁
也是根据条件锁来做的,它与条件锁和事件锁的区别在于:
5.1条件锁:一次可以放行任意个处于等待状态的线程;
5.2事件锁:一次可以放行全部处于等待状态的线程;
5.3信号量锁:通过规定,成批的放行特定个处于上锁状态的线程。
以上内容为大家介绍了Python3中最常使用的5种线程锁,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。http://www.mobiletrain.org/
猜你喜欢LIKE
相关推荐HOT
python gensim库是什么?
pythongensim库是什么?gensim库在文本监控里,首先在稳定上,坚如磐石,不用担心稳定性问题,其次,时效性很强,执行能力很快,经常在最重要的...详情>>
2023-11-06 21:48:19python中getattr()是什么?
python中getattr()是什么?本文教程操作环境:windows7系统、Python3.9.1,DELLG3电脑。1、getattr()用来获取对象中的属性值;获取对象object的属...详情>>
2023-11-06 21:41:07python标识符如何使用?
python标识符如何使用?为了给编程中函数、类等进行区分,会赋予它们不同的名称。我们把这种命名叫做标识符,也可以理解为符号的标记。当然这种...详情>>
2023-11-06 21:33:55Python IDE之Thonny的介绍
pythonIDE之Thonny的介绍今天要介绍的IDE,可能没用过,甚至可能没听说过。叫Thonny,是塔尔图大学开发的,适合程序员新手。它的界面很容易使用...详情>>
2023-11-06 20:54:19热门推荐
如何使用python中的help函数?
沸如何使用python的callable函数?
热python gensim库是什么?
热python中xluntils库是什么?
新python中getattr()是什么?
python中的win32com库是什么?
python标识符如何使用?
如何使用python中schedule模块?
python中ruamel.yaml模块是什么?
defaultdict在python中计算键值的和
python sleep和wait对比分析
python中字符串转成数字的几种方法
python中SocketServer是什么?
python中如何使用@contextmanage?