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

Vista: 17115|Resposta: 0

[Comunicação] Explicação detalhada do AutoResetEvent em .net/c#

[Copiar link]
Publicado em 20/03/2018 13:19:01 | | |

Conceitos relacionados a threads
1. Sincronização de threads
ManualResetEvent
O método Set() define o estado como Sinalizado
Reset() para definir como sem sinal
WaitOne() bloqueia até ter sinal, e se houver sinal no momento de chamar WaitOne, ele não bloqueia
AutoResetEvent
A diferença em relação ao ManualResetEvent é que o AutoResetEvent.WaitOne() muda automaticamente o estado do objeto do evento, ou seja, o estado do evento muda toda vez que o AutoResetEvent.WaitOne() é executado. Sinal - > sem sinal; Sem sinal – > tem sinal
example:


  
myResetEven.Set(), que na verdade é equivalente a um switch, se o método set() não for executado, o seguinte waitOne() não poderá esperar a notificação para deixá-lo executar, de modo que a instrução após waitOne não será executada.
Método do monitor
O mecanismo Wait() Pulse() é usado para interação entre threads, quando um objeto emite Monitor.Wait(), a thread que está acessando o objeto permanecerá no estado de espera. até receber um sinal de acordar. Monitor.Pulse() é usado para enviar sinais ao thread em espera.
Ou seja, na área crítica entre Monitor.Enter() e Monitor.Exit(), para liberar o bloqueio do objeto e bloquear a thread atual, ele está em estado de espera na fila.

Lock é diferente do Mutex
Sincronização de travas entre múltiplas threads
Sincronização de múltiplas threads entre processos Mutex, ou sincronização de múltiplos processos
Na programação multithread .Net, as classes AutoResetEvent e ManualResetEvent são frequentemente usadas, e seu uso é muito semelhante, mas há diferenças. O método Set coloca o sinal no estado de envio, o método Reset coloca o sinal no estado não-envio, e o WaitOne espera o sinal ser enviado. O estado inicial do construtor pode ser determinado pelo valor do parâmetro; se for verdadeiro, não está bloqueando, e falso é o estado de bloqueio. Se uma thread chama o método WaitOne, a thread recebe o sinal quando está no estado de envio e continua executando para baixo. A diferença é que, após a chamada, o AutoResetEvent.WaitOne() permite que apenas uma thread entre por vez, e quando uma thread recebe um sinal, o AutoResetEvent automaticamente coloca o sinal em estado de não enviar, e as outras threads que chamam o WaitOne só podem continuar esperando. Ou seja, o AutoResetEvent desperta apenas um thread por vez; O ManualResetEvent pode ativar múltiplas threads, porque quando uma thread chama o método ManualResetEvent.Set(), as outras threads que chamam o WaitOne recebem o sinal para continuar a execução, e o ManualResetEvent não configura automaticamente o sinal para não ser enviado. Em outras palavras, a menos que o método ManualResetEvent.Reset() seja chamado manualmente, o ManualResetEvent permanecerá sinalizado e o ManualResetEvent pode ativar múltiplas threads ao mesmo tempo para continuar a execução.




Anterior:ferramenta de análise de arquivos .har e HARViewer
Próximo:Implementação de trava distribuída no Zookeeper
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