python之迭代锁与信号量

Posted 晴晴小可爱的小弟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python之迭代锁与信号量相关的知识,希望对你有一定的参考价值。

如果现在需要在多处加锁大于等于2的时候 因为计算机比较笨,当他锁上一把锁的时候又所理一把锁,等他来开锁的时候他不知道用哪把钥匙来开锁,

所以这个时候我们需要把把平常的锁变为迭代锁

eg:

import threading
import time

local = threading.RLock()
# 迭代加锁首先生成实例
def run(name):
    global num
    local.acquire()  # 上锁
    num += 1
    run2(num)
    local.release()  # 解锁
    print(threading.active_count())

def run2(num):
    local.acquire()
    num += 1
    run3(num)
    local.release()

def run3(num):
    local.acquire()
    num+=1
    local.release()

num = 0
py_res = []
for i in range(50):
    t = threading.Thread(target=run,args=(t%s%i,))
    py_res.append(t)
    t.start()


for i in py_res:
    i.join()

print("num : %s"% num)

型号量可以控制同线程的个数,和锁的用法一样

import threading
import time
senm = threading.BoundedSemaphore(5)
def run(num):
    senm.acquire()  # 上锁
    time.sleep(2)
    print(run the thread %s % num)
    senm.release()  # 解锁

for i in range(50):
    t = threading.Thread(target=run, args=(%s % i,))
    t.start()
    print(threading.active_count())

while threading.active_count() != 1:
    pass
else:
    print(is done)

 

以上是关于python之迭代锁与信号量的主要内容,如果未能解决你的问题,请参考以下文章

Linux 内核同步之自旋锁与信号量的异同

自旋锁与信号量

辨析:自旋锁与信号量

python并发编程之多进程1------互斥锁与进程间的通信

为啥我在这个 python 片段中得到 float 是不可迭代的? [复制]

Linux-线程同步之互斥锁