Estados do Thread gerenciado
A propriedade Thread.ThreadState fornece uma máscara de bits que indica o estado atual. do segmento Um thread está sempre em pelo menos um dos possíveis estados na ThreadState enumeração e pode ser em vários estados, ao mesmo tempo.
Importante |
---|
Estado do segmento só tem interesse em alguns cenários de depuração.Seu código nunca deve usar o estado do segmento para sincronizar as atividades de threads. |
Quando você cria um segmento gerenciado, trata-o Unstarted estado. O thread permanece na Unstarted estado até que ele é movido para o estado iniciado pelo sistema operacional. Chamando Start permite que o sistema operacional sabe que o thread pode ser iniciado; ele não altera o estado do segmento.
Os segmentos não gerenciados que inserir o ambiente gerenciado já estão no estado de iniciado. Depois que um thread estiver no estado de iniciado, pode causar uma série de ações para alterar os estados. A tabela a seguir lista as ações que causam uma alteração de estado, juntamente com o novo estado correspondente.
Ação |
Estado novo resultante |
---|---|
O construtor para o Thread é chamado de classe. |
|
Chamadas de outro thread o Thread.Start método em um novo thread e retorna a chamada. |
|
As chamadas de segmento Thread.Sleep. |
|
As chamadas de segmento Monitor.Wait em outro objeto. |
|
As chamadas de segmento Thread.Join em outro segmento. |
|
Chamadas de outro thread Thread.Suspend. |
|
O segmento responde a uma Thread.Suspend solicitação. |
|
Chamadas de outro thread Thread.Resume. |
|
Chamadas de outro thread Thread.Abort. |
|
O segmento responde a uma Thread.Abort. |
Porque o Running estado tem um valor de 0, mas não é possível executar um teste de bit para descobrir o estado. Em vez disso, o teste a seguir (em pseudocódigo) pode ser usado:
if ((state & (Unstarted | Stopped)) == 0) // implies Running
Segmentos são freqüentemente em mais de um estado em qualquer momento. Por exemplo, se um thread estiver bloqueado em uma Monitor.Wait chamada e chamadas de outro thread Abort no mesmo thread, o segmento será em ambos o WaitSleepJoin e o AbortRequested estados ao mesmo tempo. Nesse caso, assim que o segmento retorna da chamada para Wait ou for interrompida, ele receberá o ThreadAbortException.
Depois que um thread deixa o Unstarted estado como resultado de uma chamada para Start, nunca pode retornar para a Unstarted estado. Um thread nunca pode deixar o Stopped estado.
Consulte também
Referência
Outros recursos
Histórico de alterações
Date |
History |
Motivo |
---|---|---|
Março de 2011 |
Esclarecida a relação entre a Thread.Start método e a Running estado. |
Correção de bug de conteúdo. |