Antes de começar, você deve concluir o Exercício 1.2: Coletando Dados de Encadeamento.
A Thread View (visualização Encadeamento) exibe o status de todos os encadeamentos do aplicativo e indica explicitamente conflitos e contenções de encadeamento.
Para localizar gargalos:
As setas verticais entre os encadeamentos são o que nos interessa. Uma seta indica que um encadeamento (o encadeamento no qual a seta é originada) está aguardando que outro encadeamento (o encadeamento para o qual a seta está apontando) libere uma trava. Uma seta dupla indica que dois encadeamentos estão em um estado de conflito, um aguardando o outro ser liberado do bloqueio.
Logo após a inicialização do programa, quatro encadeamentos philo* serão criados, um depois do outro. Cada encadeamento é executado por um curto período e, em seguida, solicita um bloqueio. Os pedidos não são bem-sucedidos. Quando os primeiros três pedidos de bloqueio falham, os encadeamentos entram em um estado Waiting for Lock (Aguardando Bloqueio). Quando o pedido de bloqueio para o quarto encadeamento falha, ocorre um conflito, e o vídeo indica que todos os quatro encadeamentos estão em um estado Deadlocked (Conflitante).
Os encadeamentos philo* estão aguardando por uma trava de outros encadeamentos philo* que também estão aguardando por uma trava. Neste caso, temos um conflito: O programa atinge um impasse e não pode continuar.
Nota: É possível visualizar informações específicas sobre os pedidos de bloqueio,
conflitos e outros estados, pausando o cursor sobre um determinado segmento de encadeamento. Isso exibe uma dica de ferramenta que especifica,
por exemplo, o nome de um bloqueio e identifica o encadeamento que está mantendo o bloqueio (o "Locking Thread (Encadeamento de Bloqueio)").
Agora que compreendeu porque ocorre um conflito, você está pronto para começar Exercício 1.4: Resolvendo o gargalo de encadeamento.