10、第七 - 网络编程基础 - 递归锁--threading.RLock()

 

  Python 中的递归锁,其实就是大锁里面包含了小的锁。Python中为了支持在同一线程中多次请求同一资源,python提供了可重入锁RLock

举例说明 --(可以尝试把 threading.RLock() 改为 threading.Lock() 进行验证 )如下:

import threading,time

def run1():
    print ("grab the  first part data")
    lock.acquire()
    global num1
    num1 += 1
    lock.release()
    return num1

def run2():
    print ("grab the  second part data")
    lock.acquire()
    global num2
    num2 += 1
    lock.release()
    return num2

def run3():
    lock.acquire()
    res1 = run1()
    print ("---between run1 and run2 ")
    res2 = run2()
    lock.release()
    print(res1,res2)

if __name__ == "__main__":
    num1,num2 = 0,0
    lock = threading.RLock() #改成互斥锁,threading.Lock()进程会进入死循环,产生死锁
    for i in range(5):
        t = threading.Thread(target=run3)
        t.start()
while threading.active_count() != 1:
    print(threading.active_count())

else:
    print("--all threads done--")
    print(num1,num2)

输出:
grab the  first part data
---between run1 and run2 
grab the  second part data
1 1

grab the  first part data
---between run1 and run2 
grab the  second part data
2 2

grab the  first part data
---between run1 and run2 
grab the  second part data
3 3

grab the  first part data
---between run1 and run2 
grab the  second part data
4 4

grab the  first part data
---between run1 and run2 
grab the  second part data
5 5

--all threads done--
5 5

注:run3 有自己的锁,调用了run1与run2 ,其中run1 与run2有自己的锁,就是所中有锁。 

posted on 2018-04-08 17:48  C.Q&CHEN  阅读(201)  评论(0)    收藏  举报

导航