//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 |