[c#] C# 스레드 보호

C#에서 다중 스레드를 사용할 때 스레드 보호는 매우 중요합니다. 여러 스레드가 동시에 전역 변수나 리소스를 수정하는 경우 데이터 일관성 및 안전성 문제가 발생할 수 있습니다. 여기에는 몇 가지 기술이 있습니다.

lock 키워드를 사용한 스레드 보호

lock 키워드는 코드 블록을 한 번에 하나의 스레드만 실행되도록 합니다. 다른 스레드가 lock 블록에 들어가려고 하면 해당 스레드는 대기 상태로 들어가며, 이미 lock된 블록이 해제될 때까지 대기해야 합니다.

class Program
{
    private static object _lock = new object();

    static void Main()
    {
        lock (_lock)
        {
            // 보호가 필요한 코드
        }
    }
}

Monitor 클래스를 사용한 스레드 보호

Monitor 클래스는 lock 키워드보다 더 세밀한 제어를 제공합니다. Monitor.EnterMonitor.Exit 메서드를 사용하여 감시하고자 하는 리소스에 대한 락을 설정하고 해제합니다.

class Program
{
    private static object _lock = new object();

    static void Main()
    {
        Monitor.Enter(_lock);
        try
        {
            // 보호가 필요한 코드
        }
        finally
        {
            Monitor.Exit(_lock);
        }
    }
}

Semaphore나 Mutex 사용하기

SemaphoreMutex를 사용하여 보호가 필요한 코드 영역에 진입 가능한 스레드의 수를 제어할 수 있습니다. 이를 통해 동시에 여러 스레드가 접근해도 안전하게 작업할 수 있습니다.

class Program
{
    private static Semaphore _semaphore = new Semaphore(1, 1);

    static void Main()
    {
        _semaphore.WaitOne();
        try
        {
            // 보호가 필요한 코드
        }
        finally
        {
            _semaphore.Release();
        }
    }
}

이러한 방법들을 사용하여 C#의 다중 스레드 환경에서 데이터를 안전하게 보호할 수 있습니다.

참고: