Nunca suspenda uma thread em seu próprio processo!

Um cliente encontrou um problema de travamento de baixa frequência e longo prazo: sua thread de interface do usuário chamava o kernel e simplesmente travava. O dump do kernel não conseguia mostrar um rastreamento de pilha do modo de usuário porque a pilha havia sido descartada. A investigação revelou uma thread watchdog que periodicamente suspendia a thread da interface do usuário para capturar rastreamentos de pilha, mas desta vez ela travou por mais de cinco horas. A causa raiz: um deadlock. A thread watchdog, tentando obter um rastreamento de pilha, precisava de uma trava de tabela de função, mas a thread da interface do usuário estava suspensa, mantendo a trava. O artigo enfatiza nunca suspender uma thread dentro de seu próprio processo, pois isso aumenta o risco de deadlocks devido à contenção de recursos. Para suspender uma thread e capturar sua pilha, faça-o de outro processo para evitar deadlocks.
Leia mais