¿Por qué no volátil en System.Double y System.Long?

Una pregunta como la mía ha sidopreguntó, pero el mío es un poco diferente. La pregunta es: "¿Por qué no se permite la palabra clave volátil enC# en tiposSystem.Double ySystem.Int64, etc.? "

En el primer sonrojo, le respondí a mi colega: "Bueno, en una máquina de 32 bits, esos tipos requieren al menos dos tics para incluso ingresar al procesador, y el marco .Net tiene la intención de abstraer detalles específicos del procesador como ese. " A lo que él responde: "¡No está abstrayendo nada si te impide usar una función debido a un problema específico del procesador!"

Está dando a entender que un detalle específico del procesador no debe mostrarse a una persona que usa un marco que "abstrae" detalles como ese lejos del programador. Por lo tanto, el marco (o C #) debería abstraerlos y hacer lo que sea necesario para ofrecer las mismas garantías paraSystem.Double, etc. (ya sea un semáforo, una barrera de memoria o lo que sea). Argumenté que el marco no debería agregar la sobrecarga de un semáforo envolatile, porque el programador no espera tanta sobrecarga con dicha palabra clave, porque un semáforo no es necesario para los tipos de 32 bits. La mayor sobrecarga para los tipos de 64 bits puede ser una sorpresa, por lo tanto, es mejor que el marco .Net simplemente no lo permita y haga que haga su propio semáforo en tipos más grandes si la sobrecarga es aceptable.

Eso nos llevó a investigar de qué se trata la palabra clave volátil. (veresta página). Esa página dice, en las notas:

En C #, el uso del modificador volátil en un campo garantiza que todo el acceso a ese campo use VolatileRead o VolatileWrite.

Hmmm .....VolatileRead yVolatileWrite ¡ambos son compatibles con nuestros tipos de 64 bits! Mi pregunta, entonces, es:

"¿Por qué no se permite la palabra clave volátil enC# en tiposSystem.Double ySystem.Int64, etc.? "

Respuestas a la pregunta(4)

Su respuesta a la pregunta