developer tip

SemaphoreSlim의 사용법을 이해해야합니다.

copycodes 2020. 12. 9. 08:22
반응형

SemaphoreSlim의 사용법을 이해해야합니다.


다음은 내가 가지고있는 코드이지만 SemaphoreSlim이 무엇을하는지 이해하지 못합니다.

async Task WorkerMainAsync()
{
  SemaphoreSlim ss = new SemaphoreSlim(10);
  List<Task> trackedTasks = new List<Task>();
  while (DoMore())
  {
    await ss.WaitAsync();
    trackedTasks.Add(Task.Run(() =>
              {
                DoPollingThenWorkAsync();
                ss.Release();
              }));
  }
  await Task.WhenAll(trackedTasks);
}

void DoPollingThenWorkAsync()
{
  var msg = Poll();
  if (msg != null)
  {
    Thread.Sleep(2000); // process the long running CPU-bound job
  }
}

await ss.WaitAsync(); & ss.Release();무엇을 합니까?

한 번에 50 개의 스레드를 실행하고 다음과 같은 코드를 작성하면 한 번에 SemaphoreSlim ss = new SemaphoreSlim(10);10 개의 활성 스레드를 실행해야합니다.

10 개의 스레드 중 하나가 완료되면 다른 스레드가 시작됩니다 .... 내가 맞지 않으면 샘플 상황을 이해하도록 도와주세요.

와 함께 사용하려면 왜 await가 필요 ss.WaitAsync();합니까? 무엇을 ss.WaitAsync();합니까?


한 번에 50 개의 스레드를 실행하면 SemaphoreSlim ss = new SemaphoreSlim (10); 한 번에 10 개의 활성 스레드를 실행하도록 강제합니다.

맞아요; 세마포어를 사용하면 동시에이 작업을 수행하는 작업자가 10 명 이상이되지 않습니다.

WaitAsync세마포어를 호출 하면 해당 스레드에 해당 토큰에 대한 "액세스"가 주어 졌을 때 완료 될 작업이 생성됩니다. await-이 작업을 수행하면 "허용 된"경우 프로그램이 계속 실행됩니다. 를 호출하는 것보다 비동기 버전 Wait을 사용하는 것은 메서드가 동기가 아닌 비동기 상태를 유지하도록 보장하고 메서드가 async콜백으로 인해 여러 스레드에서 코드를 실행할 수 있다는 사실을 처리하는 데 중요합니다. 세마포어와의 자연스러운 스레드 친 화성이 문제가 될 수 있습니다.

참고 : 실제로 비동기 적이 지 않고 동기식이기 때문에 접미사 DoPollingThenWorkAsync가 없어야 Async합니다. 그냥 전화하십시오 DoPollingThenWork. 독자들에게 혼란을 줄 것입니다.


이 질문은 실제로 카운트 다운 잠금 시나리오와 관련이 있지만 SemaphoreSlim을 간단한 비동기 잠금으로 사용하려는 사람들을 위해 찾은이 링크를 공유 할 가치가 있다고 생각했습니다. 코딩을 더 깔끔하고 안전하게 만들 수있는 using 문을 사용할 수 있습니다.

http://www.tomdupont.net/2016/03/how-to-release-semaphore-with-using.html

나는 스왑을했다 _isDisposed=true_semaphore.Release()그 폐기 주위에 경우에 어떻게 든 여러 번 호출있어하지만.

또한 SemaphoreSlim은 재진입 잠금이 아닙니다. 즉, 동일한 스레드가 WaitAsync를 여러 번 호출하면 세마포어의 개수가 매번 감소된다는 점에 유의해야합니다. 간단히 말해 SemaphoreSlim은 스레드를 인식하지 않습니다.

코드 품질에 대한 질문과 관련하여 릴리스가 항상 릴리스되도록하기 위해 최종적으로 트라이 파이널 내에 릴리스를 배치하는 것이 좋습니다.

참고 URL : https://stackoverflow.com/questions/20056727/need-to-understand-the-usage-of-semaphoreslim

반응형