日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【10.4】线程同步--Lock、RLock

發(fā)布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【10.4】线程同步--Lock、RLock 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import dis 5 import threading 6 from threading import Lock 7 total = 0 8 lock = Lock() 9 10 11 def add(): 12 global total 13 global lock 14 for i in range(1000000): 15 # 獲取鎖 16 lock.acquire() 17 total += 1 18 # 釋放鎖 19 lock.release() 20 21 22 def desc(): 23 global total 24 global lock 25 for i in range(1000000): 26 # 獲取鎖 27 lock.acquire() 28 total -= 1 29 # 釋放鎖 30 lock.release() 31 32 33 thread1 = threading.Thread(target=add) 34 thread2 = threading.Thread(target=desc) 35 36 thread1.start() 37 thread2.start() 38 39 40 def add1(a): 41 a += 1 42 43 44 def desc1(a): 45 a -= 1 46 47 48 """ 49 1.load a 50 2.load 1 51 3.+(-) 52 4.賦值給a 53 """ 54 print(dis.dis(add1)) 55 print(dis.dis(desc1)) 56 57 thread1.join() 58 thread2.join() 59 60 print(total) 41 0 LOAD_FAST 0 (a)2 LOAD_CONST 1 (1)4 INPLACE_ADD6 STORE_FAST 0 (a)8 LOAD_CONST 0 (None)10 RETURN_VALUE None45 0 LOAD_FAST 0 (a)2 LOAD_CONST 1 (1)4 INPLACE_SUBTRACT6 STORE_FAST 0 (a)8 LOAD_CONST 0 (None)10 RETURN_VALUE NoneC:\Users\Administrator\Python\imooc>python demo.py41 0 LOAD_FAST 0 (a)2 LOAD_CONST 1 (1)4 INPLACE_ADD6 STORE_FAST 0 (a)8 LOAD_CONST 0 (None)10 RETURN_VALUE None45 0 LOAD_FAST 0 (a)2 LOAD_CONST 1 (1)4 INPLACE_SUBTRACT6 STORE_FAST 0 (a)8 LOAD_CONST 0 (None)10 RETURN_VALUE None 0C:\Users\Administrator\Python\imooc>python demo.py41 0 LOAD_FAST 0 (a)2 LOAD_CONST 1 (1)4 INPLACE_ADD6 STORE_FAST 0 (a)8 LOAD_CONST 0 (None)10 RETURN_VALUE None45 0 LOAD_FAST 0 (a)2 LOAD_CONST 1 (1)4 INPLACE_SUBTRACT6 STORE_FAST 0 (a)8 LOAD_CONST 0 (None)10 RETURN_VALUE None 0

?

1.用鎖會影響性能

2.鎖會引起死鎖

?

RLock

1 #!/user/bin/env python 2 # -*- coding:utf-8 -*- 3 4 import threading 5 # RLock,在同一個線程里面,可以連續(xù)調(diào)用多次acquire,一定要注意acquire的次數(shù)要和release的次數(shù)相等 6 # 線程間還是有相互競爭的關(guān)系 7 from threading import RLock 8 total = 0 9 lock = RLock() 10 11 12 def add(): 13 global total 14 global lock 15 for i in range(1000000): 16 # 獲取鎖 17 lock.acquire() 18 lock.acquire() 19 total += 1 20 # 釋放鎖 21 lock.release() 22 lock.release() 23 24 25 def desc(): 26 global total 27 global lock 28 for i in range(1000000): 29 # 獲取鎖 30 lock.acquire() 31 total -= 1 32 # 釋放鎖 33 lock.release() 34 35 36 thread1 = threading.Thread(target=add) 37 thread2 = threading.Thread(target=desc) 38 39 thread1.start() 40 thread2.start() 41 42 thread1.join() 43 thread2.join() 44 45 print(total) 0

?

轉(zhuǎn)載于:https://www.cnblogs.com/zydeboke/p/11298248.html

總結(jié)

以上是生活随笔為你收集整理的【10.4】线程同步--Lock、RLock的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。