pyhtonスレッドロック

質問:あなたはロックが必要なのですか、なぜグローバルインタープリタロックを持っていますか?

A:グローバルインタプリタロックはCPythonのインタプリタ、同じ時間であり、複数のスレッドが唯一のスレッドがCPUを予定して持つことができます

  これは、スレッドとCPUロックの間で、時間はGIL、データの絶対的なセキュリティが保証できない場合でも、スレッドとCPUの間を通過しました

ロックカテゴリー

1、ミューテックス

2、デッドロック

3、再帰的ロック

グローバルインタプリタロックが、データ・セキュリティの問題が依然として発生する
からスレッドインポートスレッド
 インポート時間


DEF 試験():
     グローバルN- 
    TEMP = N- 
    (time.sleep 1 
    N- = TEMP - 1 


N- = 10 
t_li = []
 のための I (5レンジ):
    Tは、スレッド(目標= = テスト)
    t_li.append(T)
    t.start()
[t.join()のために Tをt_li]
 プリント(N-)    9。

ミューテックス

使用锁、解决了数据安全问题
からスレッドインポートスレッド、ロック
 インポート時間


デフ試験(ロック):
    lock.acquire()
    グローバルn個の
    TEMP = N 
    time.sleepを( 1 
    N = TEMP - 1 
    lock.release()


N = 10 
ロック = ロック()
t_li = []
 のための I における範囲(5 ):
    T =スレッド(目標=試験、引数= (ロック))
    t_li.append(T)
    t.start()
[t.join( )についてT t_li】
 プリント(N)    5

デッドロック

#の科学者の麺
からスレッディングインポートロック
 からスレッディングインポートスレッド
 インポート時間
Noddle = ロック() = ロック()


DEFのTEST1(名):
    noddle.acquire()
    印刷' %Sが得たパスタ'%の名前)
     #の時間。 SLEEP(2)
    chopsticks.acquire()
     印刷' %Sは箸を取得'%の名前を)
     印刷' %S麺'%の名称)
    time.sleep(1)
    chopsticks.release()
    noddle.release()


DEF TEST2(名):
    chopsticks.acquire()
    プリント' %sの拿到筷子'名)
    time.sleep( 0.3 
    noddle.acquire( )
    プリント' %sの拿到面条'名)
     、印刷' %sの吃面'名)
    noddle.release()
    chopsticks.release()


T1 =スレッド(目標= TEST1、引数=(' トム' 、) )
t1.start()
T2=スレッド(目標= TEST2、引数=(' ABC ' ))
t2.start()

T3 =スレッド(目標= TEST1、引数=(' ジョーカー' ))
t3.start()
T4 =スレッド(目標= TEST2 、引数=(' FF ' ))
t4.start()

再帰的ロック

再帰的ロック、複数の取得()は、デッドロックが生じない
からスレッディングインポートRLOCK
 からスレッディングインポートスレッド
A = RLOCK()


DEF 試験():
    a.acquire()
    a.acquire()
    a.acquire()
    印刷' こんにちは、世界" 


スレッド(ターゲット =テスト).start()

 

#の科学者たち麺再帰的なロック
からスレッディングインポートRLOCK
 からスレッディングインポートスレッド
 インポート時間
Noddleは箸= = RLOCK()


DEFのTEST1(名):
    noddle.acquire()
    印刷' %Sだパスタ'%の名前)
     time.sleepを(2)
    chopsticks.acquire()
     印刷' %Sは箸を取得'%の名前を)
     印刷' %S麺'%の名前)
     time.sleep(1)
    chopsticks.release()
    noddle.release()


DEF TEST2(名):
    chopsticks.acquire()
    プリント' %sの拿到筷子'名)
    time.sleep( 0.3 
    noddle.acquire()
    プリント" %sの拿到面条'%の名)
     、印刷' %sの吃面'名)
    noddle.release()
    chopsticks.release()


T1 =スレッド(目標= TEST1、引数=(' トム' ))
t1.start()
T2=スレッド(目標= TEST2、引数=(' ABC ' ))
t2.start()
T3 =スレッド(目標= TEST1、引数=(' ジョーカー' ))
t3.start()
T4 =スレッド(目標= TEST2 、引数=(' FF ' ))
t4.start()

 

おすすめ

転載: www.cnblogs.com/wt7018/p/11069111.html