python多线程中Lock()与RLock()锁详解
资源总是有限的,程序运行如果对同一个对象进行操作,则有可能造成资源的争用,甚至导致死锁
也可能导致读写混乱
锁提供如下方法:
1.Lock.acquire([blocking])
2.Lock.release()
3.threading.Lock() 加载线程的锁对象,是一个基本的锁对象,一次只能一个锁定,其余锁请求,需等待锁释放后才能获取
4.threading.RLock() 多重锁,在同一线程中可用被多次acquire。如果使用RLock,那么acquire和release必须成对出现,
调用了n次acquire锁请求,则必须调用n次的release才能在线程中释放锁对象
例如:
无锁:
# coding=utf8 import threading import time num = 0 def sum_num(i): global num time.sleep(1) num += i print(num) print('%s thread start!' % (time.ctime())) try: for i in range(6): t = threading.Thread(target=sum_num, args=(i,)) t.start() except KeyboardInterrupt as e: print("you stop the threading") print('%s thread end!' % (time.ctime()))
学习网址:
https://www.cnblogs.com/guyuyun/p/11185832.html