【发布时间】:2019-04-13 20:57:10
【问题描述】:
我是线程新手,有一个问题..
from threading import Thread, Lock
s=0
lock =Lock() ---->lock object position
def sample():
global s
for i in range(10000):
lock.acquire()
s+=1
lock.release()
t1 = Thread(target=sample)
t2 = Thread(target=sample)
t1.start()
t2.start()
t1.join()
t2.join()
print s
此代码给出 20000 的预期结果,因为对变量 s 的操作是原子完成的。
但是当我更改 lock() 创建位置时,锁没有按预期工作。我变了
from threading import Thread, Lock
s=0
def sample():
lock =Lock() ---> lock() added inside function
global s
for i in range(10000):
lock.acquire()
s+=1
lock.release()
t1 = Thread(target=sample)
t2 = Thread(target=sample)
t1.start()
t2.start()
t1.join()
t2.join()
print s
通过此更改,我得到了不一致的值。所以我猜测锁在这里不起作用。
有人可以根据这个例子帮助我理解锁的工作原理吗?
是否只有在两个线程都使用相同的锁定对象时才会兑现锁定?
TIA
【问题讨论】:
标签: python multithreading