[c#] C# 스레드 세마포어

C#에서 스레드 세마포어를 사용하여 공유 자원에 대한 동기화를 제어할 수 있습니다. 세마포어는 스레드 간의 공유 자원에 대한 접근을 제한하고, 동기화 및 병행성 관리를 가능하게 합니다.

System.Threading 네임스페이스

System.Threading 네임스페이스에는 Semaphore 클래스가 포함되어 있으며, 이를 사용하여 스레드 간의 자원 공유를 제어할 수 있습니다.

using System;
using System.Threading;

public class SemaphoreExample
{
    private static Semaphore _semaphore = new Semaphore(2, 2);

    public static void Main()
    {
        for (int i = 1; i <= 5; i++)
        {
            Thread t = new Thread(DoWork);
            t.Start(i);
        }
    }

    private static void DoWork(object id)
    {
        _semaphore.WaitOne();
        Console.WriteLine("스레드 " + id + "가 세마포어 획득");
        Thread.Sleep(1000);
        Console.WriteLine("스레드 " + id + "가 세마포어 반납");
        _semaphore.Release();
    }
}

위의 예제에서는 Semaphore 클래스를 사용하여 세마포어를 생성하고, 일정 수의 스레드만이 세마포어를 동시에 획득할 수 있도록 제한하고 있습니다.

이러한 방식으로 C#에서 스레드 세마포어를 사용하여 병행성 관리를 할 수 있습니다. 세마포어를 적절히 활용하면 공유 자원에 대한 안정적인 동기화를 달성할 수 있습니다.

참고 자료

이제 C#에서 스레드 세마포어를 사용하는 방법에 대해 간단히 알아보았습니다. 이를 통해 병행성을 관리하고 공유 자원에 안전하게 접근할 수 있게 되었습니다.