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

Vista: 30344|Resposta: 2

[Fonte] Segurança de rosca em C# com trava

[Copiar link]
Publicado em 13/06/2016 17:26:25 | | |

Se seu código está em um processo que tem várias threads rodando ao mesmo tempo, pode estar rodando o código ao mesmo tempo. Se o resultado de cada execução for o mesmo de uma única thread, e os valores das outras variáveis forem os mesmos esperados, ela é segura contra threads.
Em outras palavras, a interface fornecida por uma classe ou programa é atômica para threads ou a troca entre múltiplas threads não leva à ambiguidade no resultado da execução da interface, o que significa que não precisamos considerar a sincronização.
Problemas de segurança de threads são causados tanto por variáveis globais quanto estáticas.
Se cada thread tiver apenas operações de leitura para variáveis globais e estáticas, mas não operações de escrita, de modo geral, essa variável global é segura para threads; Se múltiplas threads realizarem operações de leitura e escrita em uma variável ao mesmo tempo, a sincronização de threads geralmente é necessária, caso contrário pode afetar a segurança da thread.

O objetivo do lock é impedir operações concorrentes quando a execução multithread é feita por várias threads, e objetos do tipo de referência de lock permitem que apenas uma thread opere por vez em sua área travada.

O lock só pode bloquear uma variável do tipo de referência, ou seja, bloquear um endereço




Há uma diferença entre os resultados de rodar com e sem travamento:

Após o travamento: o valor de i diminuirá um a um, não haverá saltos, nem saídas repetidas, até o valor de 0;

Sem bloqueio: o valor de saída de i vai saltar, descontínuo decrescente, e também pode ter um valor de saída de -1;

Motivo: Após adicionar um bloqueio, apenas uma thread pode executar o código na área travada por vez, e ambas as threads são executadas em ordem, então não haverá saída interrompida.




Anterior:Usuário cancelado de diálogo de salvamento (MS Visual Database Tools)
Próximo:Uma boa classe DBHelper que executa procedimentos armazenados
Publicado em 14/06/2016 10:53:36 |
 Senhorio| Publicado em 10/02/2022 09:18:58 |
.NET/C# Lock Principle Monitor fornece uma explicação detalhada
https://www.itsvse.com/thread-9633-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