189 8069 5689

线程锁,递归锁-创新互联

线程锁,递归锁

创新互联是一家集网站建设,淮安企业网站建设,淮安品牌网站建设,网站定制,淮安网站建设报价,网络营销,网络优化,淮安网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

##线程锁应用

import time,threading
python中自己加锁了所以用不着!
def run(n):
    lock.acquire() #获取一把锁
    global  num
    num+=1
    lock.release() #释放锁

lock=threading.Lock()
num=0
loot=[] #创建一个空列表(存线程实例)
for i in range (50):
    t=threading.Thread(target=run,args=("t-%s"%i,))
    t.start()
    loot.append(t) #为了不阻塞后面的线程启动,不在这里join,先放到一个列表里

for t in loot:#循环线程实例列表,等待所有线程执行完毕
    t.join() #等待一个线程全部执行完再执行其他线程(把并程改成了串行)
print("-----ddddd-----",threading.current_thread(),threading.active_count())#看是否是主线程,活跃的线程数量
print("num:",num)

##递归锁的意思是相当于已过字典。。。每开一道门就存门对应的钥匙数据,退出时去字典找对应的门用的钥匙

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

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

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

num,num2=0,0
lock=threading.RLock() ##递归锁创建
for i in range(10):
    t=threading.Thread(target=run3)
    t.start()

while threading.active_count()!=1:
    print(threading.active_count())
else:
    print("------all threads done------")
    print(num,num2)

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:线程锁,递归锁-创新互联
文章位置:http://cdxtjz.cn/article/cehdes.html

其他资讯