线程锁-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了

猜你喜欢

转载自www.cnblogs.com/pfeiliu/p/12543644.html