python 线程锁、条件变量

相关模块: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

通过条件变量实现的定时器

你可能感兴趣的:(python 线程锁、条件变量)