相关模块:thread、threading
thread 模块
thread 文档:https://docs.python.org/2/library/thread.html
This module provides low-level primitives for working with multiple threads. The threading module provides an easier to use and higher-level threading API built on top of this module.
主要方法:
thread.allocate_lock() # 获取一个互斥锁
thread.get_ident() # 获取线程 id
thread.lock 互斥锁对象
实现了互斥锁原语
方法列表:
lock.acquire([waitflag]) # waitflag 为 0 时,语义为 try_lock;非 0 时,为 lock
lock.release()
lock.locked()
threading 模块
RLock 可重入(reentrant)锁对象
语义:通过引用计数(__count)和线程 id (__owner)标志,使得同一线程可以重入
支持操作:
acquire()
release()
条件变量辅助操作:
_acquire_restore
_release_save
Condition 条件变量
说明:可以底层可以使用互斥锁(thread.lock)或者可重入锁(RLock),主要方法:
wait
notify
notifyAll
实现:不是对于系统条件变量的简单封装,而是自己通过锁机制实现重新实现的条件变量的语义。每当有一个线程 wait 的时候,先拿到共享锁,再为此线程分配一个互斥锁(thread.lock),让线程等待在此锁上,并将此锁加入等待队列 __waiters,notify 则是从等待队列 __waiters 中取出任意一个互斥锁释放掉。代价是每个线程都会开一个互斥锁。
Semaphore 信号量
说明:和互斥量类似,只不过是一次可以由多个使用者拿到锁。
实现:通过条件变量 Condition 和计数实现。
Event 事件
封装条件变量的通知机制
Timer
通过条件变量实现的定时器