美文网首页
python Lock对象,对临界区加锁

python Lock对象,对临界区加锁

作者: 孙广宁 | 来源:发表于2022-06-02 23:41 被阅读0次
12.4 如果我们的程序用到了多线程,我们相对临界区进行加锁处理,避免竞态条件的出现
  • 可以利用threading模块的Lock对象来处理
import threading
class ShareCounter:
    def __init__(self,initial_value=0):
        self._value=initial_value
        self._value_lock = threading.Lock()
    def incr(self,delta=1):
        with self._value_lock:
            self._value +=delta
    def decr(self,delta=1):
        with self._value_lock:
            self._value -=delta
  • 当使用with语句是,Lock对象可确保产生互斥的行为,也就是说,同一时间只允许一个线程执行with语句中的代码块,with语句会在执行缩进的代码块时获取到锁,当控制流离开缩进的语句块时释放这个锁
  • 尽量使用with语句去调用锁Lock,以防代码忘记调用release方法来释放Lock

相关文章

  • python Lock对象,对临界区加锁

    12.4 如果我们的程序用到了多线程,我们相对临界区进行加锁处理,避免竞态条件的出现 可以利用threading模...

  • 多线程(10) — Lock,ReentrantLock及读写锁

    大体来说Lock、ReentrantLock与Synchronized很相似,对对象加锁 首先是Lock接口: l...

  • go day11 互斥锁、读写锁

    互斥锁: 其中Mutex为互斥锁,Lock()加锁,Unlock()解锁,使用Lock()加锁后,便不能再次对其进...

  • 二.并发理论总结2-锁模型

    成熟的锁模型 1.指定锁对象 2.加锁 3.进入临界区 4.释放锁 指定所对象的解释 首先一定指定当前锁对象,这个...

  • 多线程复习

    自旋锁 & 互斥锁 自旋锁:atomic、OSSpinLock、dispatch_semaphore_t临界区加锁...

  • mysql锁

    加锁规则 原则1: 加锁的基本单位是Next Key lock。 原则2: 查找过程中访问到的对象才会加锁 优化...

  • Unity c# Lock Thread

    Lock : 关键字将语句块标记为临界区,方法是获取给定对象的互斥锁,执行语句,然后释放该锁。此语句的形式如下:...

  • Mysql全局锁、表锁、行级锁

    全局锁 全局锁就是对整个数据库加锁。加锁方式是Flush tables with read lock(FTWRL)...

  • 锁的使用

    一、NSLock 加锁lock 解锁unlock NSLock *lock = [[NSLock alloc]in...

  • Python多线程之threading之Lock对象

    threading之Lock对象 要介绍Python的threading模块中的Lock对象前, 首先应该了解以下...

网友评论

      本文标题:python Lock对象,对临界区加锁

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