ci stiamo imbattendo in problemi di prestazioni, e un potenziale colpevole è un uso centralizzato di un singleton volatile. il codice specifico è della formaQual è il costo della parola chiave volatile in un sistema multiprocessore?
class foo {
static volatile instance;
static object l = new object();
public static foo Instance {
if (instance == null)
lock(l) {
if (instance == null)
instance = new foo();
}
return foo();
}
}
questo è in esecuzione su una scatola a 8 vie, e stiamo vedendo cambio di contesto per la somma di 500.000 al secondo. le risorse di sistema tipiche vanno bene - 25% cpu util, 25% memory util, IO basso, no paging, ecc.
utilizza un campo volatile per indurre una barriera di memoria o qualsiasi tipo di cache della cpu ricaricare? o va solo dopo la memoria principale ogni volta, solo per quel campo?
no, è un'istanza di foo. – kolosy
Non sono sicuro del motivo per cui questo deve essere un volatile, poiché non stai cambiando il riferimento. –
Io non sono né - questo è il codice di qualcuno che sto facendo il debug. la mia domanda principale, tuttavia, è che l'uso di volatile può causare problemi di contesa su una casella x86 multi-core – kolosy