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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1.进程和线程 队列:1、进程之间的通信: q = multiprocessing.Queue()2、...
    一只写程序的猿阅读 4,821评论 0 17
  • 线程和进程 计算机,用于计算的机器。计算机的核心是CPU,在现在多核心的电脑很常见了。为了充分利用cpu核心做计算...
    人世间阅读 24,420评论 3 85
  • 线程状态新建,就绪,运行,阻塞,死亡。 线程同步多线程可以同时运行多个任务,线程需要共享数据的时候,可能出现数据不...
    KevinCool阅读 4,227评论 0 0
  • 下面是我自己收集整理的Java线程相关的面试题,可以用它来好好准备面试。 参考文档:-《Java核心技术 卷一》-...
    阿呆变Geek阅读 15,007评论 14 507
  • 差点又忘了,对谁都好的人,其实最无情。 我只有一颗心,装得下你就装不下其他人,因为满了。你也只有一...
    云居雁阅读 6,940评论 1 3

友情链接更多精彩内容