MS Link:O login do hiperlink está visível.
A palavra-chave volátil indica que um campo pode ser modificado por múltiplas threads executando ao mesmo tempo. Campos declarados como voláteis não são restringidos pela otimização do compilador (assumindo que sejam acessados por uma única thread). Isso garante que o campo seja renderizado com o valor mais recente o tempo todo.
O modificador volátil é tipicamente usado para campos acessados por múltiplas threads, mas que não serializam o acesso usando uma instrução lock.
Palavras-chave voláteis podem ser aplicadas aos seguintes tipos de campos:
- Tipo de citação.
- Tipo de ponteiro (em um contexto inseguro). Note que, embora o ponteiro em si possa ser mutável, o objeto para o qual ele aponta não pode ser mutável. Em outras palavras, "apontador para um objeto mutável" não pode ser declarado.
- Tipos como sbyte, byte, short, ushort, int, uint, char, float e bool.
- Um tipo de enum com um dos seguintes tipos base: byte, sbyte, short, ushort, int ou uint.
- Parâmetros genéricos de tipo que são conhecidos por serem tipos de referência.
- IntPtr e UIntPtr.
Palavras-chave variáveis só podem ser aplicadas a campos de uma classe ou estrutura.Variáveis locais não podem ser declaradas como voláteis。
Chega de bobagens, escreva um loop para testar:
Vamos testar 10.000 vezes em loop,descobriu que a saída dos valores de a está correta, mas,Isso não explicaVolátil é seguro para roscaPorque, se você testar várias vezes, vai perceber que haverá erros de cálculo! Porque há chance de um resultado correto e uma chance de resultado errado
Código:
Vamos testar 100.000 loops novamente, e podemos descobrir que o valor de a está incorreto, porque quanto menor o número de loops, menor a chance de erro, e o erro não é tão óbvio, assim como não houve erro após 10.000 loops agora há pouco.
Neste momento, adicionamos um bloqueio para testar, e pode-se ver que o valor de a é calculado corretamente, como esperávamos.
Código:
Resumo: volátil não garante a segurança da thread, como você pode ver no exemplo acima.
|