[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#에서 스레드 세마포어를 사용하여 병행성 관리를 할 수 있습니다. 세마포어를 적절히 활용하면 공유 자원에 대한 안정적인 동기화를 달성할 수 있습니다.
참고 자료
- Microsoft Docs: Semaphore Class
이제 C#에서 스레드 세마포어를 사용하는 방법에 대해 간단히 알아보았습니다. 이를 통해 병행성을 관리하고 공유 자원에 안전하게 접근할 수 있게 되었습니다.