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

Vista: 24412|Resposta: 1

[Fonte] A diferença entre ManualResetEvent e AutoResetEvent aprendido por threads C#

[Copiar link]
Publicado em 31/05/2018 14:59:47 | | | |
Vamos discutir primeiro o ManualResetEvent, e vou intercalar alguns conteúdos do AutoResetEvent durante a discussão para comparar:

O ManualResetEvent pode bloquear uma ou mais threads até que um sinal seja recebido dizendo ao ManualResetEvent para parar de bloquear a thread atual.

Informações sobre o ManualResetEvent

Thread .net/c# Suspender e Retomar soluções obsoletas
https://www.itsvse.com/thread-4769-1-1.html
(Fonte: Architect_Programmer)


Imagine que o objeto ManualResetEvent tenha uma propriedade de tipo Booleana, IsRelease, para controlar se deve bloquear a thread atual. Podemos definir essa propriedade ao inicializar, como ManualResetEvent event=new ManualResetEvent(false); Isso indica que a propriedade padrão é bloquear a thread atual.

Exemplo de código:



Note uma diferença importante entre ManualResetEvent e AutoResetEvent aqui:

O manual certamente envia um sinal tanto para a rosca 1 quanto para a rosca 2,O automático só envia sinal para um deles aleatoriamente.

Por que um se chama manual e o outro automático? Acho que essa é uma pergunta que muitas pessoas fazem, e agora vamos analisar essa questão.

Apenas now_manualResetEvent. Set(); Acho que todos entendem essa frase, que pode ser considerada como a definição da propriedade do IsRelease como verdadeira

_manualResetEvent.WaitOne(); Não bloqueia mais a thread 1 após receber um sinal. O valor do IsRelease é verdadeiro durante todo o processo depois disso.Se

Se você quiser devolver o valor de IsRelease para false, deve chamar novamente o método _manualResetEvent.Reset().

Se for _autoResetEvent.set(), então _autoResetEvent.WaitOne() automaticamente definirá o valor de IsRelease como false.

Por isso um se chama automático e o outro é manual.



Código de teste:







Anterior:. O componente de mapeamento de objetos OOM mais rápido do .NET, Tiny Mapper, na prática do projeto
Próximo:Impressão e saída de informações de depuração em C# DEBUG explicação detalhada
 Senhorio| Publicado em 18/12/2024 20:30:44 |
Tanto ManualResetEvent quanto AutoResetEvent herdam deEventWaitHandle, como mostrado na figura abaixo:



Referência:O login do hiperlink está visível.

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