[DICA — C#/Série Certificação] — Manage Program Flow — Parte 4

Cleiton Felipe
3 min readSep 18, 2018

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

--

--

Cleiton Felipe

Pai do Pedro, casado com Janna Granado, Software Developer, Co-founder/Community Manager da SoroCódigos, adoro desenvolver soluções