2009-10-12 4 views

risposta

27

È necessario iniziare da MSDN.

  • System.Threading.Mutex: Un primitivo di sincronizzazione che può essere utilizzato anche per la sincronizzazione dei processi.
  • System.Threading.Semaphore: limita il numero di thread che possono accedere a una risorsa o un pool di risorse contemporaneamente.

Generalmente si utilizza solo un Mutex tra i processi, ad es. se si dispone di una risorsa che deve essere condivisa da più applicazioni o se si desidera creare un'applicazione a singola istanza (ad esempio, consentire l'esecuzione di una sola copia contemporaneamente).

Un semaforo consente di limitare l'accesso a un numero specifico di thread simultanei, in modo da poter disporre, ad esempio, di un massimo di due thread nell'esecuzione di un percorso di codice specifico alla volta.

+5

+1 per MSDN. È RTFM-goto per tutto nello spazio dell'API di Windows. –

+0

I semafori possono anche essere utilizzati per sincronizzare i processi. "I semafori del sistema con nome sono visibili in tutto il sistema operativo e possono essere utilizzati per sincronizzare le attività dei processi": https://msdn.microsoft.com/en-us/library/ system.threading.semaphore (v = vs.110) .aspx –

5

Si potrebbe voler verificare l'istruzione di blocco. E 'in grado di gestire la maggior parte dei compiti filo synchonization in 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 
     } 
    } 
} 

L'istruzione lock viene implementata chiamando Monitor.Enter e Monitor.Exit. E 'equivalente al seguente codice:

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

Bella risposta, e potenzialmente utile, ma non proprio una risposta alla domanda posta. Pensato a -1, ma lasciandolo a questo commento. ;-) – peSHIr

+0

Bene, l'implementazione è stata modificata in C# 5.0 :) – KadekM