C#의 lock 문
이 자습서에서는 C#의lock
문에 대해 설명합니다.
C#의lock
문
lock(obj)
문는 다음 코드 섹션에 액세스 할 수 없음을 지정합니다. C#에서 동시에 둘 이상의 스레드. lock(obj)
문 내의obj
매개 변수는object
클래스의 인스턴스입니다. lock(obj)
문은 C#에서 스레드를 관리하는 효율적인 방법을 제공합니다. lock(obj)
내부의 코드가 한 스레드에 의해 액세스되고 다른 스레드가 동일한 코드에 액세스하려는 경우 두 번째 스레드는 첫 번째 스레드가이를 실행하기를 기다려야합니다. 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