Synchronizing resources

Descripción

70-483 (Exame 70-483) C# Fichas sobre Synchronizing resources, creado por Thiago Russo el 23/04/2016.
Thiago Russo
Fichas por Thiago Russo, actualizado hace más de 1 año
Thiago Russo
Creado por Thiago Russo hace alrededor de 8 años
1
0

Resumen del Recurso

Pregunta Respuesta
Pq é necessário sincronizar recursos quando se trabalha em ambiente multithread? Com o apoio de TPL fica mto fácil criar várias Threads. Mas podemos ter problemas ao acessar os mesmos dados a partir de várias Threads simultaneamente. Sem sincronizar os recursos, a operação não fica atômica
Exemplo de 2 Threads acessando o mesmo dado compartilhado
O operador lock Exemplo, explicação e possível problema
lock como utilizá-lo Usar a instrução lock com objeto de referência que é privado para a classe. Um obj público pode ser utilizado por outras threads, que podem bloqueá-lo. Deve tb ser um tipo de referência, porque um tipo de valor iria ficar "boxed" cada vez que você obtém um bloqueio. Geraria um bloqueio completamente novo de cada vez, perdendo o mecanismo de bloqueio. Felizmente, o compilador ajuda lançando um erro qdo vc usa um tipo de valor. Deve evitar tb o bloqueio da variável this porque essa variável poderia ser usado por outro código para criar um bloqueio.
Deadlock utilizando operador lock
Volatile class (classe volátil) Pra que serve? Qdo usar? O compilador às vezes muda a ordem das declarações no seu código. Normalmente, isso não seria um problema em um ambiente single-threaded. P/ corrigir isso, além de lock, pode usar System.Threading.Volatile q tem médodos especiais q desativam as otimizações do compilador. Usá-los é complicado e o .Net oferece a palavra-chave 'volatile': public static volatile int _flag = 0; Vc deve usar somente se realmente precisar dele. Pq ele desativa certas otimizações de compilador, ele irá prejudicar o desempenho. Tb ñ é algo que é suportado por todas as linguagens .NET (Visual Basic não tem), por isso dificulta a interoperabilidade de linguagem.
Volatile class (classe volátil) exemplo .
Classe Interlocked O que é? Em um problema de multithread envolvendo n++ e n--, vimos que a operação não era atômica, pois n ++ é traduzido em n = n + 1. Fazer operações atômicas é o trabalho da classe Interlocked que pode ser encontrado no namespace System.Threading. Ao usar o Interlocked.Increment e Interlocked.Decrement, você cria uma operação atômica, Em aplicações + complexas q add ou subtrair, ainda utilzaremos lock
Classe Interlocked Exemplo
Interlocked.Exchange if (Interlocked.Exchange (ref isInUse, 1) == 0) { } Este código recupera o valor atual e imediatamente define como o novo valor na mesma operação. Ele retorna o valor anterior antes de modificá-lo. Temos tb o CompareExchange: Este método verifica para ver se o é o valor esperado ; se for, ele substitui-lo com outro valor.
Compare exchange as a nonatomic operation
Mostrar resumen completo Ocultar resumen completo

Similar

Porova teórica C# mod l
Cursos Professor Jonatã
Linguagem C#
Alex Araujo Furado
Prova teorica C# mo ll
Cursos Professor Jonatã
Entity framework - code first
José Fernandes
Flashcard Módulo 1 - XAMARIN LATINO AMERICA
Marcone Barbosa
Entity framework
José Fernandes
C# and ASP.NET
Kalebi Fiorentini
Linguagens de programação
Rodrigo Barbosa7452
Conceitos do ASP.NET CORE (Incompleto)
José Fernandes Rezende Neto
Dates and times .NET
Felipe Couto Viola
Fluxo Game UC 8
Lucas Coluzzo