본문 바로가기
CSharp/CShap Tip

lock 키워드로 멀티스레딩 동기화

by MonoSoft 2025. 4. 11.
728x90
반응형

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

728x90
반응형

댓글