Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 2976|Resposta: 2

[Fonte] Como a preguiça em C# mantém os threads seguros

[Copiar link]
Publicado em 02/07/2023 21:41:55 | | |
Após o .NET 4.0, um tipo de carregamento seguro e preguiçoso foi fornecido no .NET FrameworkPreguiçoso
O Lazy é capaz de operar em um ambiente multithreaded, garantidoGetValueA função é executada apenas uma vez, implementando assimModo singleton

No passado, usávamos bloqueios de julgamento quadrático para implementar padrões singleton ou para utilizar funções de inicialização estáticas de classes
Com o tipo Preguiçoso, esse processo é simplificado e o desempenho é melhor

Quando o Lazy é criado, você pode especificar o modo de instalação da thread, atualmente existem dois modos,Somente publicaçãoExplicaçãoe Publicação

Modo Apenas Publicação


1. Execute a função de inicialização e a encaixe em um sistema internoCaixatipo, resolver o problema do julgamento de valor nulo, se o caso foi criado, ele retornará nulo,O processo é inseguro em relação à thread

2. Determinar se o m_boxed está vazio, m_boxed é o campo salvo por valor, se for igual a vazio, ele é definido como boxed, esse método pode garantir atomicidade,O processo é seguro para fios

3. Se o CreateValue retorna vazio, significa que outros threads já criaram instâncias, então define como instâncias já criadas

4. Marque o método de inicialização como inicializado, o que geralmente ocorre no caso de execução concorrente, e execute o CreateValue várias vezes


Somente publicaçãoO modo é usado com base emIntertravado.CompareExchange, essa classe contém métodos de atomicidadeCAS (Compare and swap)

O CAS é implementado usando instruções atômicas fornecidas pela CPU, e diferentes versões de runtime podem ter implementações diferentes
Implementação específica intertravada No método nativo, amigos interessados podem verificar a implementação específica por meio do código coreclr/jvm

Neste modo,Uma função singleton pode ser executada várias vezes, mas no final é garantido que apenas uma instância será obtida

Modo de Exposição e Publicação

Explicaçãoe PublicaçãoModo usado no modoVolátil+MonitorMonitorÉ simfechaduraA implementação da instrução, a implementação Monitor no código nativo, é um bloqueio pesado

MonitorA suspensão de fila e thread são suportados, o que pode garantir que todo o bloco de método seja executado em estado de thread única


Link original:O login do hiperlink está visível.




Anterior:ASP.NET a diferença entre ThreadStatic, CallContext e HttpContext
Próximo:SQL Server consulta o número atual de conexões ao banco de dados
 Senhorio| Publicado em 02/07/2023 21:42:16 |
 Senhorio| Publicado em 04/07/2023 19:19:45 |
Otimização de desempenho em C#: O Lazy inicializa o Lazy<T> com atraso
https://www.itsvse.com/thread-7700-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com