ColaPlusIce 发表于 2021-1-18 21:29:43

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()


suchocolate 发表于 2021-1-19 08:53:54

两个线程都启动了,但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]
查看完整版本: python多线程问题)