美文网首页LabXu
Python 递归锁

Python 递归锁

作者: 陈忠俊 | 来源:发表于2019-10-21 23:08 被阅读0次
from threading import RLock
from threading import Lock

其中RLock是递归锁,而Lock是互斥锁。
其区别是Rlock实例化之后该对象可以在一个线程一直去acquire(),没有release(),其他对象不能获取锁;Lock是互斥锁,同一时间只能在一个线程/进程acquire()一次,没有release(),其他对象不能获取锁。

当同一个线程/进程需要用的2次(包含)以上的锁的时候,用Lock就可能出现死锁的问题。这时候就需要用递归锁去解决该问题。

下面的例子是老男孩的教程中的:

from threading import RLock, Thread
import time
fork_lock = noodle_lock = RLock()

def eat1(name):
    noodle_lock.acquire()
    print("%s get noodles now" %name)
    fork_lock.acquire()
    print("%s get fork now" %name)
    print("Eating noodles now")
    fork_lock.release()
    noodle_lock.release()

def eat2(name):
    noodle_lock.acquire()
    print("%s get noodles now" %name)
    time.sleep(1)
    fork_lock.acquire()
    print("%s get fork now" %name)
    print("Eating noodles now")
    fork_lock.release()
    noodle_lock.release()    

if __name__ == "__main__":
    Thread(target = eat1, args = ('test-1',)).start()
    Thread(target = eat2, args = ('test-2',)).start()
    Thread(target = eat1, args = ('test-3',)).start()
    Thread(target = eat2, args = ('test-4',)).start()

输出:

$ py -3 subprocess_test.py
test-1 get noodles now
test-1 get fork now
Eating noodles now
test-2 get noodles now
test-2 get fork now
Eating noodles now
test-3 get noodles now
test-3 get fork now
Eating noodles now
test-4 get noodles now
test-4 get fork now
Eating noodles now

相关文章

  • Python 递归锁

    其中RLock是递归锁,而Lock是互斥锁。其区别是Rlock实例化之后该对象可以在一个线程一直去acquire(...

  • iOS -锁-NSRecursiveLock

    NSRecursiveLock,递归锁,顾名思义,执行递归操作的时候使用的锁。是互斥锁中的递归锁,可被同一线程多次...

  • Swift - 锁

    NSLock NSRecursiveLock 递归锁 当发生自己调用自己的时候,或者递归的时候,需要使用递归锁NS...

  • 【第58天】python全栈从入门到放弃

    1 递归锁Rlock()和互斥锁 递归锁 互斥锁 2 条件Condition 条件的例子 3 守护进程和守护线程与...

  • 013-iOS锁机制

    锁的类别 NSLockingNSLockNSConditionLock 条件锁NSRecursiveLock 递归...

  • python数据结构教程 Day6

    python数据结构教程 Day6 本节重点 递归定义 递归调用的实现 简单递归的应用 一、递归 在python基...

  • iOS中锁的种类

    NSRecursiveLock递归锁NSRecursiveLock实际上定义的是一个递归锁,这个锁可以被同一线程多...

  • python Day9 线程,锁,递归锁

    线程的第一种写法:join()加上就变成串行,要等待这个线程完全执行完了,才会起第二个线程 线程的第二种写法: -...

  • Python精简入门学习(十)

    Python精简入门学习之递归函数-递归 -递归 -如图所示

  • 重温系列之多线程并发:锁分类

    可重入锁 可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层递归函数仍然有获取该锁的代码,但不受影...

网友评论

    本文标题:Python 递归锁

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