lock 키워드로 멀티스레드 동기화 처리하기
멀티스레드 환경에서 동시에 공유 자원에 접근하면
데이터 충돌이나 예기치 않은 동작이 발생할 수 있습니다.
이때 lock 키워드를 사용하면 한 번에 하나의 스레드만
자원에 접근하도록 동기화할 수 있어 안전한 처리가 가능합니다.
using System;
using System.Threading;
class Program
{
static readonly object lockObj = new object();
static int count = 0;
static void Main()
{
Thread t1 = new Thread(Increment);
Thread t2 = new Thread(Increment);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
Console.WriteLine($"최종 카운트: {count}");
}
static void Increment()
{
for (int i = 0; i < 1000; i++)
{
lock (lockObj)
{
count++;
}
}
}
}
lock 문은 지정된 객체(lockObj)에 대한 독점 권한을 획득한
상태에서만 블록 안의 코드를 실행합니다.
동기화가 필요한 경우라면 반드시 lock 또는 Monitor를 통해
충돌 방지를 고려해야 합니다.
데이터베이스 트랜잭션 처리, 파일 쓰기 등에도 유용합니다.
lock은 너무 넓은 범위를 감싸지 않도록 주의하세요.
병목 현상이 발생할 수 있습니다.

#CSharp멀티스레드 #lock동기화 #스레드안정성 #DotNetThread관리
#Monitor대신lock #공유자원보호 #ThreadSafe코드 #CleanCode멀티처리
#데이터경합해결 #lock사용예제
'CSharp > CSharp 문법' 카테고리의 다른 글
string.IsNullOrWhiteSpace()로 문자열 유효성 쉽게 검사하기 (0) | 2025.06.16 |
---|---|
File.ReadAllLines()로 파일 전체를 배열로 쉽게 읽기 (0) | 2025.06.11 |
DateTime.TryParse()로 날짜 형식 안전하게 파싱하기 (0) | 2025.06.03 |
Math.Round()로 숫자를 깔끔하게 반올림하기 (0) | 2025.06.02 |
Span<T>로 대용량 데이터 고속 처리하기 (0) | 2025.05.30 |
댓글