nos encontramos con problemas de rendimiento, y un posible culpable es el uso centralizado de un singleton volátil. el código específico es de la forma¿Cuál es el costo de la palabra clave volátil en un sistema multiprocesador?
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();
}
}
esto se ejecuta en un cuadro de 8 vías, y estamos viendo el cambio de contexto por una suma de 500.000 por segundo. los recursos típicos del sistema son correctos: 25% de CPU, 25% de memoria de uso, IO bajo, sin paginación, etc.
¿El uso de un campo volátil induce una barrera de memoria o cualquier tipo de recarga de caché de la CPU? ¿o simplemente va detrás de la memoria principal todo el tiempo, solo para ese campo?
no, es una instancia de foo. – kolosy
No estoy seguro de por qué esto tiene que ser volátil, ya que no está cambiando la referencia. –
tampoco, este es el código de alguien que estoy depurando. Sin embargo, mi pregunta principal es si el uso de elementos volátiles podría causar problemas de contención en un cuadro x86 de varios núcleos. – kolosy