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()执行了
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
lock.acquire()
while tickt_count > 0:
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)
如果这样执行,结果就会是只有window1.start()在执行,如果这样是正确的,那我怎么确定这个是否有多线程执行呢
你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答
本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。
因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。