python——多线程学习

import threading
import time
import os

#acquire([timeout]): 尝试获得锁定。使线程进入同步阻塞状态。
#release(): 释放锁。使用前线程必须已获得锁定,否则将抛出异常。

#Lock属于全局,Rlock属于线程。
# 构造方法: Lock(),Rlock(),推荐使用Rlock()

# Lock对比Rlock
# import threading
#
# lock = threading.Lock()  # Lock对象
# lock.acquire()
# lock.acquire()  # 产生了死锁。
# lock.release()
# lock.release()
# print("aaaaaa")
# lock.acquire()
#
# import threading
#
# rLock = threading.RLock()  # RLock对象
# rLock.acquire()
# rLock.acquire()  # 在同一线程内,程序不会堵塞。
# rLock.release()
# rLock.release()

def booth(tid):
    global i
    global lock
    while True:
        lock.acquire()   #使用lock.acquire()获得线程锁。此时,其他的线程就无法再获得该锁了,直到锁被另一个线程释放:lock.release()。
        if i!=0:
            i=i-1
            print ("窗口:",tid,",剩余票数:",i)
            time.sleep(1)
        else:
            print ("Thread_id",tid,"No more tickets")
            os._exit(0)
        lock.release()
        time.sleep(1)

i = 100
lock=threading.Lock()  #创建线程锁

for k in range(10):

    new_thread = threading.Thread(target=booth,args=(k,))  #target: 要执行的方法; args/kwargs: 要传入方法的参数。
    new_thread.start()  #start():  线程准备就绪,等待CPU调度,启动线程。
原文地址:https://www.cnblogs.com/mentiantian/p/10407344.html