Synchronizing resources

Description

70-483 C# (Exame 70-483) Flashcards on Synchronizing resources, created by Thiago Russo on 23/04/2016.
Thiago Russo
Flashcards by Thiago Russo, updated more than 1 year ago
Thiago Russo
Created by Thiago Russo over 8 years ago
1
0

Resource summary

Question Answer
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
Show full summary Hide full summary

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