[c#] C# 스레드 상호배제

C#에서 멀티스레드 환경에서 데이터를 안전하게 공유하려면 상호배타적 접근이 필요합니다. 스레드가 공유 자원에 동시에 접근하지 못하도록 하는 것이 상호배제입니다. C#에서는 몇 가지 방법으로 이를 달성할 수 있습니다.

lock 문 사용

class SharedResource
{
    private object lockObj = new object();
    private int counter = 0;

    public void IncrementCounter()
    {
        lock (lockObj)
        {
            counter++;
        }
    }
}

lock 문을 사용하여 특정 코드 블록을 한 번에 하나의 스레드만 실행하도록 보장할 수 있습니다. 이를 통해 공유 자원에 대한 안전한 접근을 보장할 수 있습니다.

Mutex 사용

class SharedResource
{
    private Mutex mutex = new Mutex();
    private int counter = 0;

    public void IncrementCounter()
    {
        mutex.WaitOne();
        counter++;
        mutex.ReleaseMutex();
    }
}

Mutex 클래스를 사용하여 한 번에 한 스레드만이 특정 부분에 접근하도록 보장할 수 있습니다.

Monitor 사용

class SharedResource
{
    private int counter = 0;

    public void IncrementCounter()
    {
        Monitor.Enter(this);
        counter++;
        Monitor.Exit(this);
    }
}

Monitor 클래스를 사용하여 락을 설정하고 해제하여 상호배제를 구현할 수 있습니다.

C#에서는 이러한 방법들을 사용하여 멀티스레드 환경에서의 데이터 상호배타적 접근을 보장할 수 있습니다.

참고 자료: