并发编程之递归锁

递归锁

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

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. 同一个线程必须保证,加锁的次数和解锁的次数相同,其他线程才能够抢到这把锁
posted @ 2019-07-05 17:40  Hello_Jack  阅读(2311)  评论(0编辑  收藏  举报
# 页脚html代码 /*头部导航栏*/ #navigator { font-size:15px; border-bottom: 1px solid #ededed; border-top: 1px solid #ededed; height: 60px;/*导航栏高度,原始50*/ clear: both; margin-top: 25px; } /*导航栏设置,可以自定义导航栏的目录*/ #navList { min-height: 35px; float: left; } #navList li { /*每一个栏目节点*/ float: left; margin: 0 5px 0 0; /*这里原来是0 40px 0 0 */ } #navList a { /*栏目文字的格式*/ display: block; width: 5em; height: 22px; float: left; text-align: center; padding-top: 19px; }