2010-04-01 17 views
9

Ho una classe che gestisce una risorsa condivisa. Ora, dal momento che l'accesso alla risorsa dipende da molti parametri, questa classe viene istanziata e smaltita più volte durante la normale esecuzione del programma.È sicuro bloccare una variabile statica in una classe non statica?

La risorsa condivisa non supporta la concorrenza, quindi è necessario un qualche tipo di blocco. La prima cosa che mi venne in mente sta avendo un'istanza statica nella classe, e acquisire le serrature su di esso, in questo modo:

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

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

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

Ha senso, o vuoi utilizzare un altro approccio?

risposta

6

Sì, è possibile utilizzare una variabile statica per proteggere una risorsa condivisa.

È inoltre possibile utilizzare typeof(class) as the expression inside lock. Vedere l'avvertenza qui sotto, tuttavia, con la variabile statica è almeno più protetta all'interno della classe.

+5

Non vorrei bloccare typeof (classe), poiché si potrebbe ottenere un deadlock se qualcun altro si blocca sullo stesso tipo. Almeno, non farlo su tipi pubblici. – driis

+1

@driis: d'accordo, aggiunta una nota nella risposta. Grazie. –

+2

+1 per "Sì puoi ...", -1 per il suggerimento di bloccare su 'typeof (class)', quindi un aggregato 0. – LukeH

Problemi correlati