Maison  >  Article  >  développement back-end  >  Explication détaillée de l'utilisation de Semaphore en multi-threading C#

Explication détaillée de l'utilisation de Semaphore en multi-threading C#

黄舟
黄舟original
2017-09-02 14:28:072483parcourir

Cet article présente principalement en détail l'utilisation du sémaphore dans le multithreading C#, qui a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

Sémaphore : il peut être compris comme permettant aux threads d'exécuter un pool de signaux. , autant de signaux sont placés dans le pool que de nombreux threads sont autorisés à s'exécuter en même temps.


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

Remarque :

1. Si semaphore.Release(n), n>semaphore peut accueillir le sémaphore maximum, une exception se produira.
2. Lorsque le sémaphore appartenant au sémaphore est 1, le sémaphore est équivalent à Mutex
3 Lorsque le sémaphore appartenant au sémaphore > 1, le nombre de sémaphores est le nombre qui peut être obtenu par plusieurs threads en même temps. time. , à ce moment on peut considérer que les threads qui ont obtenu le sémaphore seront exécutés en même temps (la situation réelle peut être liée au nombre de cœurs CPU et au nombre de threads de dépenses CPU simultanés)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn