Programação Concorrente e Assíncrona em .NET
Classificado em Computação
Escrito em em português com um tamanho de 2,97 KB.
Exceção Simultânea Apenas Aparente
O sistema operativo comuta a execução entre as diversas threads. O Time slice é o tempo de execução de cada thread.
Exemplos de Execução Concorrente
- Navegador de Internet – Threads para carregar ou mostrar as várias partes de uma página Web;
- Acesso ao disco - Operação lenta e threads para ler/processar os dados.
O que São Monitores?
Um monitor representa uma secção de código que apenas é executado por uma thread de cada vez.
Explique os Tipos de Secção Crítica
Lock contém o método Thread safe que pode ser executado por duas ou mais threads em simultâneo. A Secção crítica pode ser executada apenas por uma thread de cada vez: lock(typeof(NomedaClasse)) { ... }
Classe Mutex -> Objeto que permite obter exclusão mútua na execução de secções críticas: Semelhante ao lock, mas sob a forma de uma classe.
Explique a Classe Semaphore
Um semáforo é um objeto de sincronização que permite controlar o acesso concorrente a um conjunto de recursos. Quando criado, deve definir-se o valor inicial e o valor máximo que o mesmo pode tomar.
Esta classe contém duas operações:
- WaitOne():
- Quando o Semáforo > 0 - Decrementa o seu valor e a execução da thread continua normalmente;
- Quando o Semáforo = 0 - Thread bloqueia e fica em lista de espera.
- Release():
- Quando o Semáforo = 0 - Incrementa semáforo e se existirem threads bloqueadas, uma delas é desbloqueada e tenta operação
WaitOne()
; - Quando o Semáforo > 0 - Incrementa semáforo e execução da thread prossegue normalmente.
- Quando o Semáforo = 0 - Incrementa semáforo e se existirem threads bloqueadas, uma delas é desbloqueada e tenta operação
Indique Outros Objetos de Sincronização
- AutoResetEvent e ManualResetEvent -> Classes utilizadas para notificar diferentes threads que um certo acontecimento ocorreu, podendo estas retomar a sua execução.
- ThreadPool -> Classe que representa um conjunto de threads, no estado bloqueado, disponíveis para realizar trabalho.
- ReaderWriterLock -> Classe que permite sincronizar acessos, entre threads de leitura e escrita, a determinada informação.
- Timer -> Permite executar um método de um objeto, de forma periódica.
O que é a Programação Assíncrona?
Na plataforma .NET 4.5, surgiu uma abordagem que simplifica a programação assíncrona, permitindo manter o código da aplicação com uma estrutura lógica semelhante ao código síncrono. Os métodos assíncronos são definidos utilizando as palavras-chave async e await.