|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
下面的代码只不断地运行一个线程(哪个先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()
复制代码
|
|