Heim >Backend-Entwicklung >C#.Net-Tutorial >Detaillierte Erläuterung der Verwendung von Semaphore im C#-Multithreading

Detaillierte Erläuterung der Verwendung von Semaphore im C#-Multithreading

黄舟
黄舟Original
2017-09-02 14:28:072510Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung von Semaphore im C#-Multithreading ausführlich vorgestellt, die einen bestimmten Referenzwert hat.

Semaphore: Es kann so verstanden werden, dass Threads die Ausführung von Signalpools ermöglichen werden so viele Signale im Pool platziert, wie viele Threads gleichzeitig ausgeführt werden dürfen.


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);
  }

Hinweis:

1. Wenn semaphore.Release(n), n>semaphore das maximale Semaphor aufnehmen kann, tritt eine Ausnahme auf.
2. Wenn der Semaphor im Besitz von Semaphor ist, entspricht er 1 Zu diesem Zeitpunkt kann davon ausgegangen werden, dass die Threads, die das Semaphor erhalten haben, gleichzeitig ausgeführt werden (die tatsächliche Situation hängt möglicherweise von der Anzahl der CPU-Kerne und der Anzahl der gleichzeitig ausgegebenen CPU-Threads ab)

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Verwendung von Semaphore im C#-Multithreading. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn