同時実行性とロック
- データが保護されていない場合、スレッドの共有データが複数、それは多数の表示されることと、データの不整合、ロックの使用、セマフォ、条件ロックを
- B。
- C。ミューテックス
1.ミューテックスが、その後、RLOCK後のセキュリティコードと引き換えにパフォーマンスを犠牲に保護されたコードを使用してロックをしてきている
マルチスレッド・プログラムの利点を失うことになるそうでない場合は、ロック解除をrelase
2.相互に排他的基本的な使用ルールをロックします:
1 インポートスレッディング 2 #ステートメントミューテックス 。3 =ロックthreading.Rlock(); 4。DEFハンドル(SID): #の機能の実装コード 5 lock.acquire()。 #のロック 6。 #ライタがcodeing 7 lock.relase()。 #のリリースロック
セマフォ:
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();
- C。ミューテックス
- B。