线程锁-LOCK
Posted pfeiliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程锁-LOCK相关的知识,希望对你有一定的参考价值。
from threading import Thread,Lock
import time
a=10
b=10
lock=Lock()
def fun():
# lock.acquire()
global a
global b
a+=1
time.sleep(1)
b+=1
# lock.release()
print("-a{}--b{}-->".format(a,b))
if __name__=="__main__":
start=time.time()
l=[]
for i in range(10):
t=Thread(target=fun)
l.append(t)
t.start()
for i in l:
i.join()
end=time.time()
print("end--------",end-start,a,b)
-a20--b11-->-a20--b12-->
-a20--b13-->
-a20--b14-->-a20--b15-->
-a20--b16-->
-a20--b17-->
-a20--b18-->
-a20--b19-->
-a20--b20-->
end-------- 1.003110408782959 20 20
由于线程间数据是共享的,多个线程共同操作一个对象,可能造成无法预期的结果。
如果把lock.acquire(),lock.release()取消注释
运行结果如下
-a11--b11--> -a12--b12--> -a13--b13--> -a14--b14--> -a15--b15--> -a16--b16--> -a17--b17--> -a18--b18--> -a19--b19--> -a20--b20--> end-------- 10.004825592041016 20 20
结果和预期的一样,但是时间也由1s变为10s了
以上是关于线程锁-LOCK的主要内容,如果未能解决你的问题,请参考以下文章