본문 바로가기
c#

semaphore..

by kcj3054 2022. 12. 6.
//semaphore...

//increase, decrease..


//initial count -> 초기에 .. 동시성으로 할 수 있는 수.. 
var semaphore = new SemaphoreSlim(2, 10);

for (int i = 0; i < 20; ++i)
{
    Task.Factory.StartNew(() =>
    {
        Console.WriteLine($"Entering task {Task.CurrentId}");

        semaphore.Wait(); // release count...- > wait on semaphore일때 block이 된다.. 

        Console.WriteLine($"Processing task {Task.CurrentId}");
    });
}

while (semaphore.CurrentCount <= 2)
{
    Console.WriteLine($"Semaphore count : {semaphore.CurrentCount}");
    Console.ReadKey();

    semaphore.Release(2); // unblock this.. 특정 slot을 release.. 
}
  • 위에서 보듯이 처음에 semaphoreslim initialCount는 초기에 동시성으로 실행할 수있는 수이고, 뒤에오는 값은 masxCount로서 최대스레드 수이다..

  • for문을 돌면서 20개의 스레드를 만든다.. => 중간에 wait을 할 때는 잠시동안 block이된다... 밑에 while을 볼 때 현재 2개보다 적을 때는 release로써 특정 slot을 release해서 열어준다...

'c#' 카테고리의 다른 글

c# 7.0...8.0  (0) 2022.12.06
c# 패턴매칭... switch case에 활용..  (0) 2022.12.06
Generic, where, using static  (0) 2022.12.06
Task vs TaskValue  (0) 2022.12.06
c# (시작하세요 c# 프로그래밍 도서 )  (0) 2022.12.05