zoukankan      html  css  js  c++  java
  • 并发编程之递归锁

    递归锁

    第一种情况:同一个线程一把锁加锁多次,不影响执行

    from threading import RLock,currentThread,Thread
    r = RLock()
    
    r.acquire()
    r.acquire()
    print("over")
    
    over
    

    第二种情况:多线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁

    from threading import RLock,currentThread,Thread
    import time
    r = RLock()
    
    def task():
        #r.acquire()	# 如果增加这行代码,程序将无法结束
        r.acquire()
        time.sleep(2)
        print(currentThread().name)
        r.release()		# 只释放了一次,但加锁了两次
    
    def task2():
        r.acquire()		# 出现了死锁的情况
        time.sleep(2)
        print(currentThread().name)
        r.release()
    
    
    Thread(target=task).start()
    Thread(target=task2).start()
    
    Thread-1
    Thread-2
    

    总结:

    1. 同一个线程对同一把锁加锁多次,不影响执行
    2. 同一个线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁
  • 相关阅读:
    假期学习总结3
    内部表操作
    Hive基础操作
    Hive数据仓库基本概念
    假期学习总结2
    MapReduce基础介绍
    HDFS的高可用机制和联邦机制
    tensorflow学习笔记2
    tensorflow学习笔记1
    python使用tensorflow训练数据集时报错
  • 原文地址:https://www.cnblogs.com/plf-Jack/p/11139744.html
Copyright © 2011-2022 走看看