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.Int64
etc.? "
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.Double
etc. (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.Int64
etc.? "