【发布时间】:2019-03-24 16:01:36
【问题描述】:
我正在尝试使用多线程来增加变量。但是,当我运行代码时,计数器保持在 1。当我删除第二次睡眠时,它会正常工作(增量为 5),但是我似乎无法弄清楚如何正确锁定变量。
我已经尝试在创建 tmp 之前锁定变量以及其他锁定方法(使用 lock、try-finalize...)。
class Casino:
euro = 0
class PlayingThread(threading.Thread):
def __init__(self, the_casino, playerno=1):
threading.Thread.__init__(self)
self.lock = threading.Lock()
self.playerno = playerno
self.the_casino = the_casino
def run(self):
time.sleep(2)
tmp = self.the_casino.euro
time.sleep(1)
self.lock.acquire()
self.the_casino.euro = tmp + 1
self.lock.release()
casino = Casino()
lt = []
for i in range(0, 5):
pt = PlayingThread(casino, i)
pt.start()
lt.append(pt)
for t in lt:
t.join()
print("We earned a lot of money! Sum=", casino.euro)
预期的输出是“我们赚了 ... Sum=5”,但它是“... Sum=1”
【问题讨论】:
-
当你说“锁定变量”时,你指的是什么变量?如果您的意思是
euro,是什么让您认为您的线程锁定euro?如果你指的是其他变量,那是什么变量?
标签: python multithreading locking