2009-10-12 14 views

Odpowiedz

27

Powinieneś zacząć od MSDN.

  • System.Threading.Mutex: Prymityw synchronizacji, który może być również używany do synchronizacji międzyprocesowej.
  • System.Threading.Semaphore: Ogranicza liczbę wątków, które mogą jednocześnie uzyskać dostęp do zasobu lub puli zasobów.

Generalnie używa się tylko Mutex w procesach, np. jeśli masz zasób, który musi współdzielić wiele aplikacji, lub jeśli chcesz utworzyć aplikację z pojedynczą instancją (tzn. dozwolona jest tylko jedna kopia).

Semafor pozwala ograniczyć dostęp do określonej liczby równoczesnych wątków, dzięki czemu można mieć na przykład maksymalnie dwa wątki wykonujące określoną ścieżkę kodu na raz.

+5

+1 dla MSDN. To RTFM-goto dla wszystkiego w przestrzeni Windows API. –

+0

Semafory mogą być również używane do synchronizacji pomiędzy procesami. "Nazwane systemowe semafory są widoczne w całym systemie operacyjnym i mogą być używane do synchronizowania działań procesów": https://msdn.microsoft.com/en-us/library/ system.threading.semaphore (v = vs.110) .aspx –

5

Możesz chcieć sprawdzić wyciąg blokujący. Może obsługiwać większość zadań wątek synchonization w 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 
     } 
    } 
} 

Oświadczenie blokada realizowana jest poprzez wywołanie Monitor.Enter i Monitor.Exit. Jest to równoznaczne z następującym kodem:

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

Dobra odpowiedź i potencjalnie przydatna, ale nie tak naprawdę odpowiedź na postawione pytanie. Myśli o wartości -1, ale pozostawiając ją przy tym komentarzu. ;-) – peSHIr

+0

Cóż, implementacja została zmieniona w C# 5.0 :) – KadekM