2009-10-12 4 views

Répondre

27

Vous devriez commencer à MSDN.

  • System.Threading.Mutex: Une primitive de synchronisation qui peut également être utilisée pour la synchronisation interprocessus.
  • System.Threading.Semaphore: limite le nombre de threads pouvant accéder simultanément à une ressource ou à un pool de ressources.

Généralement, vous n'utilisez qu'un processus Mutex, par ex. si vous disposez d'une ressource que plusieurs applications doivent partager ou si vous souhaitez créer une application à instance unique (c'est-à-dire que seule une copie peut être exécutée en même temps). Un sémaphore vous permet de limiter l'accès à un nombre spécifique de threads simultanés, de sorte que vous pouvez avoir, par exemple, un maximum de deux threads exécutant un chemin de code spécifique à la fois.

+5

+1 pour MSDN. C'est le RTFM-goto pour tout dans l'espace de l'API Windows. –

+0

Les sémaphores peuvent également être utilisés pour synchroniser les processus. "Les sémaphores système nommés sont visibles dans tout le système d'exploitation et peuvent être utilisés pour synchroniser les activités des processus": https://msdn.microsoft.com/fr-fr/library/ system.threading.semaphore (v = vs.110) .aspx –

5

Vous pouvez consulter l'instruction lock. Il peut gérer la grande majorité des tâches de synchonisation de fil en C#

class Test { 
    private static object Lock = new object(); 

    public function Synchronized() 
    { 
     lock(Lock) 
     { 
      // Only one thread at a time is able to enter this section 
     } 
    } 
} 

La déclaration de verrouillage est mis en œuvre en appelant Monitor.Enter et Monitor.Exit. Il est équivalent au code suivant:

Monitor.Enter(Lock);  
try 
{ 
    // Only one thread at a time is able to enter this section 
} 
finally 
{ 
    Monitor.Exit(Lock); 
} 
+2

Bonne réponse, et potentiellement utile, mais pas vraiment une réponse à la question posée. Pensé à un -1, mais en laissant à ce commentaire. ;-) – peSHIr

+0

Bien l'implémentation est changée en C# 5.0 :) – KadekM

Questions connexes