导语:
本文主要介绍了关于python多线程线程锁如何使用的相关知识,希望可以帮到处于编程学习途中的小伙伴
在使用多线程处理程序的过程中,多个线程如何同时操作一个对象,很容易造成线程不安全的问题,严重影响程序结果。因此,使用了线程锁。线程锁,就像我们平时生活中的锁一样,可以保护我们想要保护的对象的安全,也可以同时使用多个锁来锁定一个资源。
1、什么是线程锁?
同一时刻只允许一个线程操作该数据,可以保证
数据安全。
线程锁用于锁定资源,可以同时使用多个锁。当需要独占某个资源时,任何锁都可以锁定该资源。
2、线程锁目的
锁定一段代码。一旦获得锁权限,除非线程锁被释放,否则其他代码都无法获得锁权限。
3、为什么要使用线程锁?
当多个线程同时完成一个特定操作时,由于不是原子操作,在完成操作的过程中会被打断做其他工作,可能会产生脏数据
4、创建锁:
lock=threading.Lock()
cond=threading.Condition(lock=lock)
5、锁的方法:
cond.acquire(): 获得锁
cond.wait() 等待通知
cond.notify() 通知正在等待的锁
cond.notify_all() 通知所有正在等待的锁
cond.release() 释放锁
5、使用线程锁
"""
多线程数据访问问题
"""
import threading
num = 0
def test():
"""测试函数"""
global num
for i in range(1, 1000001):
# 上锁:锁定
lock.acquire()
num += 1
# 开锁
lock.release()
print(f"{threading.current_thread().getName()}当前线程执行完成,num: {num}")
# 创建一个互斥锁{多个线程之间互斥}对象
lock = threading.Lock()
if __name__ == "__main__":
# 创建两个线程,完成计数任务
t1 = threading.Thread(target=test)
t2 = threading.Thread(target=test)
t1.start()
t2.start()
'''
0---10
t1: 1 2 3 11 12 16 : 16
t2: 4 5 6 7 8 9 10 13 14 15 17 18 19 20 : 20
'''
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python kmeans 聚类的使用10/09
- ♥ 如何添加图形界面并在python脚本中打包?12/22
- ♥ python是如何实现封装的11/15
- ♥ python是怎么知道类型的12/03
- ♥ 如何从python字典中提取值09/04
- ♥ Python3 文件(文件)方法12/27
内容反馈