シングルスレッドに関して、マルチスレッドプログラミングは独特の問題、スレッド安全性の問題になります。いわゆるセキュリティスレッドがあればそこに、実行時にコードを同時にプロセスで複数のスレッドがあり、これらのスレッドが同時にこのコードを実行することです。それぞれの結果は、シングルスレッドの業績と同じ、また、他の変数の値を実行し、それを期待した場合。スレッドの安全性の問題は、グローバル変数と静的変数によって引き起こされます。
次のように複数のスレッド、セキュアなアクセス静的変数を確保するためには、あなたは、確実にするためにロック機構を使用することができます。
1 // 静的グローバル変数をロックする必要が 2 プライベート 静的 BOOL _isOK = falseに、 3 // ロックは、参照型の変数をロックすることができる 4。 プライベート 静的 オブジェクト _lock = 新しい新しい オブジェクト(); 5 静的 ボイドMLOCK() 。6 { 7 / / マルチスレッディング 。8 新しい新しいSystem.Threading.Thread(完了).Start(); 9 新たな新しいSystem.Threading.Thread(完了).Start(); 10 Console.ReadLine(); 11 } 12は、 13であり、 静的 無効完了() 14 { 15 // ロックが参照型変数ロックすることができる 16 のロック(_lock)を 17。 { 18は IF(!_isOK)は 19。 { 20 Console.WriteLineを(" OK " ); 21である _isOK = 真に、 22である } 23れます } 24 }
これだけでは、次のためにロックアウト
プライベート静的オブジェクト_lock =新しいオブジェクト();
最初は私はちょうどオブジェクトロッカー=新しいオブジェクトを()書きます。
オンラインのコードを読んだ後、私はBaiduのでは、基本的にはプライベート静的読み取り専用ので、私のゲストを見下ろし
プライベート:インスタンスが公開されている場合は、その独立したコードは、オブジェクトをロックすることがあり、それはデッドロックが生じ、複数のスレッドがリリースを待つ同じオブジェクトを、表示されます。
上記のように、データ・タイプが共通の問題はまた、上記発生している場合:静的
読み取り専用:他のスレッドを実行するために来ることができるようにミューテックスオブジェクトが変更されたため、オブジェクトの値でロックが、変更されていたら、
なお、ロックは、オブジェクト型の参照をロックすることができます。次のようにさらに、非同期に加えロック機構、C位の高いバージョンに加えと、スレッドの安全性を確保するための方法を待ちます。
パブリック 静的 クラスAsynAndAwait { // 。STEP 1つの プライベート 静的 int型のカウント= 0 ; // 非同期とし、セキュリティを確保するため、マルチスレッド静的変数をカウント待つ パブリック 非同期 静的 ボイドML() { // 連続スレッドの非同期と待つ複数処理 // 文が実行完了を待つ後まで待つ // このスレッドの他の文を実行する前に、 // STEP 2は 待つ Task.Run(新しい新しいアクション(M2)を); Console.WriteLineをは(「現在は、スレッドID {0}です」、System.Threading.Thread.CurrentThread.ManagedThreadId)。 // 6ステップ 数++ ; // ステップ7 Console.WriteLineを(" M1ステップは{0}である" 、カウント)。 } パブリック 静的 ボイドM2() { Console.WriteLineを(" 現在のスレッドIDが{0} " 、System.Threading.Thread.CurrentThread.ManagedThreadId)。 // ステップ3 System.Threading.Thread.Sleep(3000 )。 // ステップ4 数++; // ステップ5 Console.WriteLineを(" M2ステップは{0}である" 、カウント)。 } }
タイミングチャートでは、我々はそこに2つのスレッドがある以下に示すように、対話、見ることができます。
非同期と待機後、上記のコードの実行順序を以下に示します。
グローバル変数、静的変数への各スレッドは、読み取り専用の場合、書き込み動作は、一般的には、グローバル変数はスレッドセーフではありません。読み取りまたは変数に書き込みを複数のスレッドが同時に、一般的に検討する必要がある場合スレッドの同期、それ以外の場合は、スレッドの安全性に影響を与える可能性があります。