2009-10-12 65 views

Respuesta

27

Debe comenzar en MSDN.

  • System.Threading.Mutex: Una primitiva de sincronización que también se puede utilizar para la sincronización entre procesos.
  • System.Threading.Semaphore: Limita el número de subprocesos que pueden acceder a un recurso o conjunto de recursos al mismo tiempo.

Generalmente, solo utiliza un Mutex en todos los procesos, p. si tiene un recurso que varias aplicaciones deben compartir, o si desea crear una aplicación de un solo instancia (es decir, solo permite que se ejecute 1 copia a la vez).

Un semáforo le permite limitar el acceso a un número específico de subprocesos simultáneos, de modo que podría tener, por ejemplo, un máximo de dos subprocesos ejecutando una ruta de código específica a la vez.

+5

+1 para MSDN. Es el RTFM-goto para todo en el espacio API de Windows. –

+0

Los semáforos también se pueden usar para sincronizar entre procesos. "Los semáforos del sistema con nombre son visibles en todo el sistema operativo y se pueden usar para sincronizar las actividades de los procesos": https://msdn.microsoft.com/en-us/library/ system.threading.semaphore (v = vs.110) .aspx –

5

Es posible que desee verificar la instrucción de bloqueo. Se puede manejar la gran mayoría de las tareas Synchonization hilo 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 
     } 
    } 
} 

se implementa la instrucción lock llamando Monitor.Enter y Monitor.Exit. Es equivalente al siguiente código:

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

Buena respuesta, y potencialmente útil, pero en realidad no es una respuesta a la pregunta planteada. Pensé en un -1, pero dejándolo en este comentario. ;-) – peSHIr

+0

Bueno, la implementación se cambia en C# 5.0 :) – KadekM

Cuestiones relacionadas