美文网首页
python 线程锁、条件变量

python 线程锁、条件变量

作者: 酒桶九筒 | 来源:发表于2017-09-08 11:30 被阅读0次

相关模块: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 线程锁、条件变量

    相关模块:thread、threading thread 模块 thread 文档:https://docs.py...

  • 线程同步与互斥

    Linux--线程编程 多线程编程-互斥锁 线程同步与互斥 互斥锁 信号量 条件变量 互斥锁 互斥锁的基本使用...

  • 条件变量

    条件变量: 条件变量本身不是锁!但它也可以造成线程阻塞。通常与互斥锁配合使用。给多线程提供一个会合的场所。为什么有...

  • 33.python 线程信号量semaphore

      通过前面对 线程互斥锁lock / 线程事件event / 线程条件变量condition / 线程定时器t...

  • Linux系统编程—条件变量

    条件变量是用来等待线程而不是上锁的,条件变量通常和互斥锁一起使用。条件变量之所以要和互斥锁一起使用,主要是因为互斥...

  • 线程同步——条件变量+锁

    参考博文:https://www.cnblogs.com/zhangxuan/p/6526854.html 简介 ...

  • 互斥锁 - 生产者,消费者模型

    锁的目的是为了让当前资源只能同时被一个线程操作 cond(条件变量)的作用是为了通知线程拿到锁,唤醒线程

  • Linux线程同步

    Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量。 Linux线程同步-----互斥锁...

  • 2019-07-23

    线程同步 互斥量mutex,读写锁rwlock,条件变量cond demo:https://www.jianshu...

  • [Python系列]Python多线程

    背景:说到多线程,我们会想到的是:异步编程、同步(锁)、共享变量、线程池等等,那么Python里面多线程是如何实现...

网友评论

      本文标题:python 线程锁、条件变量

      本文链接:https://www.haomeiwen.com/subject/dbdgjxtx.html