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

黄舟
Libérer: 2017-09-02 14:28:07
original
2426 Les gens l'ont consulté

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);
  }
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!