2010-04-01 32 views
9

Tengo una clase que administra un recurso compartido. Ahora, dado que el acceso al recurso depende de muchos parámetros, esta clase se crea una instancia y se elimina varias veces durante la ejecución normal del programa.¿Es seguro bloquear una variable estática en una clase no estática?

El recurso compartido no admite simultaneidad, por lo que se necesita algún tipo de bloqueo. Lo primero que me vino a la mente es tener una instancia estática en la clase, y adquieren bloqueos en él, así:

// This thing is static! 
static readonly object MyLock = new object(); 

// This thing is NOT static! 
MyResource _resource = ...; 

public DoSomeWork() { 
    lock(MyLock) { 
     _resource.Access(); 
    } 
} 

¿Eso tiene sentido, o que podría utilizar otro enfoque?

Respuesta

6

Sí, puede usar una variable estática para proteger un recurso compartido.

También podría usar typeof(class) as the expression inside lock. Sin embargo, consulte la advertencia a continuación, con la variable estática al menos más protegida dentro de su clase.

+5

No me gustaría bloquear en typeof (clase), ya que podría encontrar un punto muerto si alguien más bloquea el mismo tipo. Al menos, no lo haga en tipos públicos. – driis

+1

@driis: De acuerdo, agregó una nota en la respuesta. Gracias. –

+2

+1 para "Sí, puedes ...", -1 para la sugerencia de bloqueo en 'typeof (clase)', así que un agregado 0. – LukeH

Cuestiones relacionadas