본문 바로가기
CSharp/CSharp 문법

lock 키워드로 멀티스레드 동기화 처리하기

by MonoSoft 2025. 6. 5.
728x90
반응형

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사용예제

728x90
반응형

댓글