>  기사  >  백엔드 개발  >  C# 멀티스레딩에서 세마포어 사용에 대한 자세한 설명

C# 멀티스레딩에서 세마포어 사용에 대한 자세한 설명

黄舟
黄舟원래의
2017-09-02 14:28:072480검색

이 글은 주로 C# 멀티스레딩에서 세마포어의 사용법을 자세하게 소개하고 있습니다. 관심있는 친구들은 참고하시면 됩니다.

세마포어: 스레드가 신호를 실행할 수 있게 해주는 풀로 이해하시면 됩니다. pool 신호의 수는 동시에 실행할 수 있는 스레드 수를 허용합니다.


private static void MultiThreadSynergicWithSemaphore()
  {
   //0表示创建Semaphore时,拥有可用信号量数值
   //1表示Semaphore中,最多容纳信号量数值
   Semaphore semaphore = new Semaphore(0, 1);


   Thread thread1 = new Thread(() =>
   {
    //线程首先WaitOne等待一个可用的信号量
    semaphore.WaitOne();
    //在得到信号量后,执行下面代码内容
    Console.WriteLine("thread1 work");
    Thread.Sleep(5000);
    //线程执行完毕,将获得信号量释放(还给semaphore)
    semaphore.Release();
   });


   Thread thread2 = new Thread(() =>
   {
    semaphore.WaitOne();
    Console.WriteLine("thread2 work");
    Thread.Sleep(5000);
    semaphore.Release();
   });
   thread2.Start();
   thread1.Start();
   //因在创建Semaphore时拥有的信号量为0
   //semaphore.Release(1) 为加入1个信号量到semaphore中
   semaphore.Release(1);
  }

설명:

1. semaphore.Release(n), n>semaphore가 최대 세마포를 수용할 수 있는 경우 예외가 발생합니다.
2. 세마포어가 소유한 세마포어가 1이면 세마포어는 Mutex와 동일합니다.
3. 세마포어가 소유한 세마포어가 1보다 크면 동시에 여러 스레드에서 세마포어 수를 얻을 수 있습니다. 세마포어를 획득한 스레드는 동시에 실행될 것으로 예상됩니다(실제 상황은 CPU 코어 수 및 CPU 동시 소비 스레드 수와 관련이 있을 수 있음)

위 내용은 C# 멀티스레딩에서 세마포어 사용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.