Por que não ser volátil no System.Double e System.Long?

Uma pergunta como a minha tem sidoPerguntou, mas o meu é um pouco diferente. A pergunta é: "Por que a palavra-chave volátil não é permitida emC# em tiposSystem.Double eSystem.Int64etc.? "

Na primeira tentativa, eu respondi ao meu colega: "Bem, em uma máquina de 32 bits, esses tipos levam pelo menos dois tiques para entrar no processador, e a estrutura .Net tem a intenção de abstrair os detalhes específicos do processador assim. " Ao que ele responde: "Não está abstraindo nada se estiver impedindo o uso de um recurso devido a um problema específico do processador!"

Ele está sugerindo que um detalhe específico do processador não deve aparecer para uma pessoa usando uma estrutura que "abstrai" detalhes como esse do programador. Portanto, a estrutura (ou C #) deve abstraí-las e fazer o que for necessário para oferecer as mesmas garantias paraSystem.Doubleetc. (seja um semáforo, barreira de memória ou qualquer outra coisa). Argumentei que a estrutura não deveria adicionar a sobrecarga de um semáforo navolatile, porque o programador não espera uma sobrecarga com essa palavra-chave, porque um semáforo não é necessário para os tipos de 32 bits. A maior sobrecarga para os tipos de 64 bits pode ser uma surpresa; portanto, é melhor para a estrutura .Net simplesmente não permitir isso e fazer o seu próprio semáforo em tipos maiores, se a sobrecarga for aceitável.

Isso nos levou a investigar o significado da palavra-chave volátil. (Vejoesta página). Essa página indica, nas notas:

Em C #, o uso do modificador volátil em um campo garante que todo o acesso a esse campo use VolatileRead ou VolatileWrite.

Hmmm .....VolatileRead eVolatileWrite ambos suportam nossos tipos de 64 bits! Minha pergunta, então, é:

"Por que a palavra-chave volátil não é permitida emC# em tiposSystem.Double eSystem.Int64etc.? "

questionAnswers(4)

yourAnswerToTheQuestion