[10.4]スレッド同期--lock、RLOCK

1  /ユーザ/ビン/ ENVパイソン!
2  - * -コーディング:UTF-8 - * - 
3  
4  インポートDIS
 5  インポートスレッド
 6  からスレッドインポートロック
 7合計= 0
 8ロック= ロック()
 9  
10  
11  DEF 追加します():
 12      グローバル合計
 13      のグローバルロック
 14      のための I における範囲(1000000 ):
 15          获取锁
16          lock.acquire()
 17         合計+ = 1
 18          释放锁
19          lock.release()
 20  
21  
22  DEF DESC():
 23      グローバル合計
 24      のグローバルロック
 25      のための I における範囲(1000000 ):
 26          获取锁
27          lock.acquire()
 28          合計- = 1
 29          释放锁
30          lock.release()
 31  
32  
33スレッド1 = threading.Thread(目標= 追加)
 34スレッド2 = threading.Thread(目標= DESC)
35  
36  thread1.start()
 37  thread2.start()
 38  
39  
40  デフADD1(A):
 41      + = 1
 42  
43  
44  デフdesc1(A):
 45      - = 1
 46  
47  
48  ""」
49  1。ロード
 50  2.load 1
 51  3 +。( - )
 52  给4赋值
 53  ""」
54  プリント(dis.dis(ADD1))
 55  プリント(dis.dis(desc1))
 56  
57  thread1.join( )
 58  thread2.join()
 59  
60 プリント(合計)
41 0 LOAD_FAST 0(A)
              2 LOAD_CONST 1(1)
              4 INPLACE_ADD 
              6 STORE_FAST 0(A)
              8 LOAD_CONST 0(なし)
             10 RETURN_VALUE 
なし
 45 0 LOAD_FAST 0(A)
              2 LOAD_CONST 1(1)
              4 INPLACE_SUBTRACT 
              6 STORE_FAST 0(A )
              8 LOAD_CONST 0(なし)
             10 RETURN_VALUEを
なし

C:\ユーザー\管理\ Pythonの\ imooc> Pythonのdemo.py  
 (a)は41 0 LOAD_FAST 0
              2 LOAD_CONST 1(1)
              4 INPLACE_ADD 
              6 STORE_FAST 0(A)
              8 LOAD_CONST 0(なし)
             10 RETURN_VALUE 
なし
 45 0 LOAD_FAST 0(A)
              2 LOAD_CONST 1(1)
              4 INPLACE_SUBTRACT 
              6 STORE_FAST 0(A)
              8 LOAD_CONST 0(なし)
             10 RETURN_VALUE 
なし
0 

C:\ユーザー\管理\ Pythonの\ imooc> Pythonはdemo.py 
 41 0 LOAD_FAST 0(A)
              2 LOAD_CONST 1(1)
              4 INPLACE_ADDを
              6 STORE_FAST 0(A) 
              8 LOAD_CONST 0(なし)
             10 RETURN_VALUE 
なし
 45 0 LOAD_FAST 0(A)
              2 LOAD_CONST 1(1)
              4 INPLACE_SUBTRACT 
              6 STORE_FAST 0(A)
              8 LOAD_CONST 0(なし)
             10 RETURN_VALUEを
なし
0

 

1.ロックは、パフォーマンスに影響を与えます

2.ロックがデッドロックにつながります

 

RLOCK

1  !/ユーザー/ binに/のenv Pythonの
2  - * -コーディング:UTF-8 - * - 
3  
4  インポートスレッディング
 5  RLOCK、行の取得に何度も呼び出すことができます同じスレッドで、数に注意を払う必要があります取得および同じリリースの数
6  スレッドまたは関連する競合間の
7  からスレッディングインポートRLOCK
 。8合計= 0
 。9ロック= RLOCK()
 10  
。11  
12である DEF 追加は、():
 13である     グローバル合計
 14      のグローバルロック
 15      のための I 範囲(1000000 ):
16          ロックを獲得
17。         lock.acquire()
 18は         lock.acquire()
 19。          合計+ 1 =
 20である         #はロックリリース
21がされている         (lock.release)
 22がされている         (lock.release)
 23である 
24  
25  DEFの)(DESC:
 26である     グローバル合計
 27      地球ロック
 28の     ための I における範囲(1000000 ):
 29の         #は、ロック獲得
30          (lock.acquireを)
 31はある          合計- 1 =
 32          #のリリースロック
33         lock.release()
 34  
35  
36スレッド1 = threading.Thread(目標= 追加)
 37スレッド2 = threading.Thread(目標= DESC)
 38  
39  thread1.start()
 40  thread2.start()
 41  
42  thread1.join()
 43  thread2.join()
 44  
45  プリント(合計)
0

 

おすすめ

転載: www.cnblogs.com/zydeboke/p/11298248.html