C# の lock ステートメント
このチュートリアルでは、C# の lock
ステートメントについて説明します。
C# の lock
ステートメント
lock(obj)
ステートメントは、コードの次のセクションにアクセスできないことを指定しています C# で同時に複数のスレッド。lock(obj)
ステートメント内の obj
パラメーターは、object
クラスのインスタンスです。lock(obj)
ステートメントは、C# でスレッドを管理する効率的な方法を提供します。lock(obj)
内のコードが 1つのスレッドによってアクセスされ、別のスレッドが同じコードにアクセスしたい場合、2 番目のスレッドは最初のスレッドがそれを実行するのを待つ必要があります。lock(obj)
ステートメントは、コードの指定されたセクションの順次実行を保証します。この現象を示すために、最初に、lock(obj)
ステートメントを使用してスレッド管理を行わずにコードの結果を示します。
using System;
using System.Threading;
namespace lock_statement {
class Program {
static readonly object lockname = new object();
static void display() {
for (int a = 1; a <= 3; a++) {
Console.WriteLine("The value to be printed is: {0}", a);
}
}
static void Main(string[] args) {
Thread firstthread = new Thread(display);
Thread secondthread = new Thread(display);
firstthread.Start();
secondthread.Start();
}
}
}
出力:
The value to be printed is: 1
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
The value to be printed is: 2
The value to be printed is: 3
ご覧のとおり、スレッド firstthread
と secondthread
はどちらもループ内のコードにランダムにアクセスします。lock(obj)
ステートメントを使用したスレッド管理を使用したコードの結果を示します。
using System;
using System.Threading;
namespace lock_statement {
class Program {
static readonly object lockname = new object();
static void display() {
lock (lockname) {
for (int a = 1; a <= 3; a++) {
Console.WriteLine("The value to be printed is: {0}", a);
}
}
}
static void Main(string[] args) {
Thread firstthread = new Thread(display);
Thread secondthread = new Thread(display);
firstthread.Start();
secondthread.Start();
}
}
}
出力:
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
The value to be printed is: 1
The value to be printed is: 2
The value to be printed is: 3
今回は、ループ内のコードは、firstthread
と secondthread
の両方から順番にアクセスされます。変数の値を変更するコードを lock(obj)
ステートメント内に配置して、データの損失を防ぐことができます。
Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.
LinkedIn