33日目のスレッドロック

PythonのGILロック
     - Pythonのロック機能は、プロセス内の一つだけのスレッドがCPUスケジューリングすることができ、同じ時間を保証することで、グローバルインタプリタロックを構築しました。
これはなぜGILロックですか?
    A:言語の発達における創始Python言語、迅速に開発言語オブジェクト、結合された場合にGILロック(C言語ロッキング)、
    スレッド間の切り替えにバイト命令に応じてスイッチ100。

 

ロック:ロック

1、一度入れ

  threading.Lock

スレッドセーフな、マルチスレッド操作、すべてのスレッドが内部処理をラインアップします。以下のような:リスト/ dictの/キュー
= +人間の安全でないリニア「処理キュー
輸入スレッド

V = []
 DEF FUNC(引数):
    v.append(アルギニン)#のスレッドの安全性の
    印刷(V)
  I におけるレンジ(10 ):
    T = threading.Thread(目標= FUNC、引数= (I))
    t.start()
リニアセキュリティ

 

輸入スレッドの
 インポート

V = []
ロック = threading.Lock()

デフFUNC(引数):
    lock.acquire()
    v.append(引数)
    time.sleep( 0.01 
    M = V [-1 ]
     プリント(引数、M)
    lock.release()


 I における範囲(10 ):
    T = threading.Thread(目標= FUNC、引数= (I))
    t.start()
ロックロック

 

輸入スレッドの
 インポート

V = []
ロック = threading.RLock()
 デフFUNC(引数):
    lock.acquire()
    lock.acquire()   RLOCKが複数回ロックすることができます

    v.append(引数)
    time.sleep( 0.01 
    M = V [-1 ]
     プリント(引数、M)

    lock.release()  ロック解除しRLOCK数回
    lock.releaseを()


 I における範囲(10 ):
    T = threading.Thread(目標= FUNC、引数= (I))
    t.start()
ロックRLOCK

 

2、一度Nを予め入れ

  BoundedSemaphore

インポート時の
 インポートスレッド

ロック = threading.BoundedSemaphore(3)は、   3は、プロセスの指定された数を解放することである
DEF FUNC(アルギニン):
    lock.acquire()
    印刷(引数)
    time.sleep( 1 
    lock.release()


 I における範囲(20 ):
    T = threading.Thread(目標= FUNC、引数= (I))
    t.start()
BoundedSemaphore

 

3、Nの放出

  調子

インポート時の
 インポートスレッド
ロック = threading.Condition()
############## ##############方法A 
'' '
デフFUNC(引数):
    印刷(「スレッドが来ました」)
    lock.acquire()
    lock.wait()#ロック

    印刷(引数)
    time.sleep(1)
    lock.release()

(10)の範囲内のiについて:
    T = threading.Thread(目標= FUNC、引数=(I))
    t.start()

真の中に:
    INP = INT(入力( '>>>'))

    lock.acquire()
    lock.notifyは(INP)#)が(数、lock.waitを入力し複数のスレッドの解放を表すためにあります
    lock.release()
第二の方法############## ###############

デフXXXX():
    印刷(「機能を実行」)
    入力( ">>>")
    #のCt = threading.current_thread()#取得現在のスレッド
    #ct.getName()
    真を返します

デフFUNC(引数):
    印刷(「スレッドが来ました」)
    lock.wait_for(XXXX)#xxxxの実行が完了したものを、このスレッドは、その後下がるのを待った後、
    印刷(引数)
    time.sleep(1)

(10)の範囲内のiについて:
    T = threading.Thread(目標= FUNC、引数=(I))
    t.start()

 

4、一度すべてを置きます

  イベント

インポート時の
 インポートスレッド

ロック = threading.Event()


DEF FUNC(アルギニン):
     印刷' スレッドが来ます' 
    lock.wait() ロック:レッド
    印刷(アルギニン)


 I における範囲(10 ):
    T = threading.Thread(目標= FUNC、引数= (I))
    t.start()

入力(" >>>> " 
lock.set() グリーン


lock.clear() 再び赤くなります

 I における範囲(10 ):
    T = threading.Thread(目標= FUNC、引数= (I))
    t.start()

入力(" >>>> " 
lock.set()
イベント

 

要約したもので
スレッドセーフ、スレッドセーフリストや辞書を。 なぜロック? - 非スレッドセーフ - コードのピースの制御

  

 

 

 

 

 

 

 

 

 

 

 

 

 

おすすめ

転載: www.cnblogs.com/xiaobai686/p/11809519.html