PYTHON 线程锁释放的时间

由于线程之间随机调度:某线程可能在执行n条后,CPU接着执行其他线程。为了多个线程同时操作一个内存中的资源时不产生混乱,我们使用锁。

Lock(指令锁)是可用的最低级的同步指令。Lock处于锁定状态时,不被特定的线程拥有。Lock包含两种状态——锁定和非锁定,以及两个基本的方法。

可以认为Lock有一个锁定池,当线程请求锁定时,将线程至于池中,直到获得锁定后出池。池中的线程处于状态图中的同步阻塞状态。


创建锁:

lock=threading.Lock()   

cond=threading.Condition(lock=lock)

锁的方法:

cond.acquire():  获得锁

cond.wait()           等待通知

cond.notify()        通知正在等待的锁

cond.notify_all()   通知所有正在等待的锁

cond.release()       释放锁

实例:

在同一个进程中所创建出来的多个线程,在加上线程锁后,只要在这个进程结束前释放,那么这个锁就可以被其他线程使用。

import threading


def work_1():
    for i in range(8):
        mutex1.acquire()
        print("A")
        try:
            mutex2.release()
        except:
            pass


def work_2():
    for i in range(8):
        mutex2.acquire()
        print("B")
        try:
            mutex1.release()
        except:
            pass


if __name__ == "__main__":
    mutex1 = threading.Lock()
    mutex2 = threading.Lock()
    t1 = threading.Thread(target=work_1)
    t2 = threading.Thread(target=work_2)
    t2.start()
    t1.start()
    t1.join()
    t2.join()
    try:
        mutex1.release()
    except:
        print("释放锁2")
    try:
        mutex2.release()
    except:
        print("释放锁1")

结果为:

B
A
B
A
B
A
B
A
B
A
B
A
B
A
B
A
释放锁1

猜你喜欢

转载自blog.csdn.net/chengqiang20152015/article/details/80467133