ミューテックスセマフォは、Pythonで

同時実行性とロック

  • データが保護されていない場合、スレッドの共有データが複数、それは多数の表示されることと、データの不整合、ロックの使用、セマフォ、条件ロックを
    • B。
      • C。ミューテックス
        1.ミューテックスが、その後、RLOCK後のセキュリティコードと引き換えにパフォーマンスを犠牲に保護されたコードを使用してロックをしてきている
        マルチスレッド・プログラムの利点を失うことになるそうでない場合は、ロック解除をrelase
        2.相互に排他的基本的な使用ルールをロックします:
        1 インポートスレッディング
         2 ステートメントミューテックス 
        。3 =ロックthreading.Rlock();
         4。DEFハンドル(SID): 機能の実装コード 
        5 lock.acquire()。 ロック 
        6。 ライタがcodeing 
        7 lock.relase()。 リリースロック
        8
        セマフォ:
        1.コールrelarse()コール+1セマフォを取得する()-1は、セマフォ
        リソースの使用に重要なものとして理解され、クリティカルセクションに入るための条件を決定する。
        2. semphoreを()を呼び出す場合relarse()関数は、単純なセマフォ1天井状況をチェックしません。最初の
        パラメータ0開始
        コール境界信号relarseの量は、()+1こと、およびセマフォチェックします:3. boudedsemphore()
        限界状況を。上限超えてはならない
        。Budedsemaphoreが0の初期時刻を設定するために使用を許可されていない、例外がスローされ
        、変数のように出て設定する際に、このような消費者製品としてB。少なくとも一つの設定、
        量の決定を使用しないように、判定開始時間変数を作るために、 acquier
        4.セマフォ、実質的に適用されます。
        1 ステートメントセマフォ: 
        2 = threading.Semaphore SEMA(0); 制限なしチェック 
        。3 SEMA = threading.BuderedSeamphore(1) 設定を確認キャップされた 
        。4. 5 
        アップル = 1 
        。6 DEFのconsumner():
         7 seam.acquire(。 ); -1 
        8 9。IFアップル== 1  10 パス 
        11。:sema2.release(); + 1。 
        12であるDEF 製品():
         13)(seam.relarseである。+ +1 
        14 IFアップル1 ==。  15のパス 
        16 
        17 印刷" 消費者:" 、アップル);
         18



      • すべてのコード:
      • - * -コーディング:UTF-8 - * - 
        "" " 
        月9月9日午後9時49分30秒2019で作成した
        
        @author:DGW-PC 
        " "" 
        セマフォは、生産消費者の問題解決
        のインポートランダム;
         インポートスレッディングを。
         インポート時間; 
        
        #の文は、セマフォ 
        SEMA = threading.Semaphore(0); #は、パラメータを記述するために使用する必要があります0の数を示し 
        sema2 threading.BoundedSemaphore =(1。); 
        
        アップル = 1。; 
        
        DEF製品(): メーカー
            のグローバルアップル、
            アップル random.randint =(1100 ); 
            time.sleep( 3。);
             印刷" 世代のApple:" りんご);
             #のsema2.release();#1 
            場合リンゴ== 1 合格し
            、他 sema2.releaseを();: + 1つの
                
        デフ消費者():
             プリント" 等待" ); 
            sema2.acquire() ; -1 
            場合リンゴ== 1 通過
            プリント" 消费:" 、りんご); 
            
        
        スレッド = []; 
        
        のために範囲(1,3 ):
            T1= threading.Thread(目標= 消費者)
            T2 = threading.Thread(目標= 製品); 
            t1.start(); 
            t2.start(); 
            threads.append(T1)。
            threads.append(T2)。
         X におけるスレッド:
            x.join();
        
            
            

         

おすすめ

転載: www.cnblogs.com/dgwblog/p/11494915.html