[DICA — C#/Série Certificação] — Manage Program Flow — Parte 4
Fala galera tudo beleza,
Este post é o 4º da série de artigos de certificação que estou escrevendo para fortalecer meus estudos para que eu posso conseguir fazer a minha prova.
Caso não tenha lido os posts anteriores é só acessar os seguintes links abaixo:
[DICA — C#/Série Certificação] — Manage Program Flow — Parte 1
[DICA — C#/Série Certificação] — Manage Program Flow — Parte 2
[DICA — C#/Série Certificação] — Manage Program Flow — Parte 3
Obs.: Todos os fontes terão um comentário do que a classe e métodos estão realizando em tempo de execução.
Bom vamos ao que interessa…
O assunto agora é referente ao armazenamento de variáveis nas Threads.
Cada Thread tem a sua própria call stack que armazena todos os métodos que estão em execução e as variáveis locais estão armazenadas também na call stack e são exclusivas ou privadas para a Thread em questão. As threads também podem ter seu próprios dados sem ser uma variável local, podemos fazer isso criando um static field em nossa classe e colocar um atributo chamado ThreadStatic como notação deste field, vamos ver no códigos isso:
Assim que executamos nosso códigos podemos observar que tanto a Thread A quanto a Thread B contem os dados de 1 até 10 correto?
Veja na imagem abaixo:
Vamos modificar o código e retirar o atributo vamos ver o que acontece, nosso códigos vai ficar assim:
E o resultado vai ser o seguinte:
Podemos observar que a nossa field ficou com o valor de 20 e o valor foi aplicado para as duas Threads e isso aconteceu porque as duas threads acessaram o mesmo valor da field, em resumo o valor da field neste caso foi sempre incrementado pelas threads e não foi zerado em momento algum, diferente quando setamos o atributo e deixamos a filed como static.
Caso queira utilizar os dados locais para cada thread é possível utilizar a classe ThreadLocal<T>, esta classe inicializa o valor do field com um delegate.
Vamos ver o código:
E agora vamos ver o resultado:
Podemos ver que o field foi inicializado quando cada thread foi executada.
Outra coisa que podemos ver neste código é que utilizamos uma outra feature da classe Thread do .Net Framework que é a Thread.CurrentThread para obter informações sobre a thread em execução. Em um próximo post (não sei se no seguinte a este), mas vou falar apenas desta classe para poder explicar melhor.
Bom para este post era isso, no próximo volto com um pouco mais de Threads.
Até o próximo!!!
Referências: https://www.amazon.com.br/Exam-Ref-70-483-Programming-MCSD/dp/0735676828