python多线程问题)
下面的代码只不断地运行一个线程(哪个先start就一直不停的运行哪个),不进行线程间的切换,不知道是哪里出了问题(应该是两个线程相互交替运行)
import threading
import time
ticket = 4
lock = threading.Lock()
def sell_ticket():
global ticket
while True:
# 上锁
lock.acquire()
if ticket > 0:
time.sleep(10)
ticket -= 1
print('{}卖了一张票,还剩{}张票'.format(threading.current_thread().name, ticket))
lock.release()
else:
lock.release()
print('票已售完')
break
t1 = threading.Thread(target=sell_ticket, name='线程1')
t2 = threading.Thread(target=sell_ticket, name='线程2')
t2.start()
t1.start()
两个线程都启动了,但while几乎会一直锁着变量,只有非常短暂的间隙会释放,所以其他进程抢不到。你把票写100张,去掉sleep就看出来了,其他进程也能抢到内存。只是抢到的机会少。
另外买票这个动作本该就是只买1张,然后进程结束的,用while一直挂着不太合适。
from threading import Thread, Lock
import time
n = 100
def task():
global n
mutex.acquire()
temp = n
time.sleep(0.1)
n = temp - 1
print('购买成功,剩余%d张电影票' % n)
mutex.release()
if __name__ == '__main__':
mutex = Lock()
t_l = []
for i in range(10):
t = Thread(target=task)
t_l.append(t)
t.start()
for t in t_l:
t.join()
页:
[1]