lock 키워드로 멀티스레딩 동기화
멀티스레드 환경에서는 하나의 리소스를
여러 스레드가 동시에 접근할 수 있기 때문에
데이터 무결성을 유지하려면 동기화가 필수입니다.
C#의 lock 키워드를 사용하면 간단하게
**임계 구역(Critical Section)**을 만들어 스레드 충돌을 방지할 수 있습니다.
using System;
using System.Threading;
class Counter
{
private int _count = 0;
private readonly object _lock = new object();
public void Increment()
{
lock (_lock)
{
_count++;
Console.WriteLine($"스레드 {Thread.CurrentThread.ManagedThreadId}: {_count}");
}
}
}
class Program
{
static void Main()
{
Counter counter = new Counter();
Thread[] threads = new Thread[5];
for (int i = 0; i < threads.Length; i++)
{
threads[i] = new Thread(counter.Increment);
threads[i].Start();
}
foreach (Thread thread in threads)
{
thread.Join();
}
}
}
출력 결과
스레드 3: 1
스레드 4: 2
스레드 5: 3
스레드 6: 4
스레드 7: 5
● lock (_lock) 구문은 해당 블록 내 코드를 하나의 스레드만 실행할 수 있도록 보장합니다.
● _lock 객체는 고유한 참조여야 하며, 일반적으로 private readonly object로 선언합니다.
● 이 방식은 은행 잔고 처리, 파일 쓰기 등 공유 자원을 다룰 때 필수적입니다.

#CSharp #Multithreading #lock #ThreadSafety #DotNet #Concurrency
#Synchronization #CriticalSection #RaceCondition #CodingTip
'CSharp > CShap Tip' 카테고리의 다른 글
string interpolation으로 문자열 조합 간결하게 하기 (0) | 2025.04.15 |
---|---|
Tuple을 활용한 다중 값 반환 (0) | 2025.04.12 |
??= 널 병합 할당 연산자 (0) | 2025.04.10 |
s 및 패턴 매칭으로 타입 검사 간소화하기 (0) | 2025.04.07 |
readonly 필드로 불변 객체 만들기 (0) | 2025.04.04 |
댓글