import threading
class WindowThread(threading.Thread):
def __init__(self, name, lock):
threading.Thread.__init__(self,name=name)
self.name = name
self.tickts = 0
self.lcok = lock
def run(self):
global tickt_count
while tickt_count > 0:
lock.acquire()
print('%s总余票:%d' %(self.name,tickt_count))
tickt_count -= 1
self.tickts += 1
print('%s已购买1张,总剩余票数:%d,当前窗口售卖票数:%d' % (self.name, tickt_count, self.tickts))
lock.release()
print('%s已售罄!当前窗口卖出:%d'%(self.name,self.tickts))
print('-' * 30)
tickt_count = 10
lock = threading.Lock()
window1 = WindowThread('窗口1', lock)
window2 = WindowThread('窗口2', lock)
window3 = WindowThread('窗口3', lock)
window1.start()
window2.start()
window3.start()
window1.join()
window2.join()
window3.join()
print('余票:',tickt_count)
像这个示例代码,我在tickt_count的计算前后加了锁,可是结果依旧会出现负数

如果我把这个锁加到while循环外面,虽然不再会出问题,但执行了数次发现似乎并没有多线程运行,只有window1.start()执行了
