/ / Quando isso acontece? Tópico suspenso na seção crítica - multithreading, independente de idioma

Quando isso acontece? Tópico suspenso em seção crítica - multithreading, agnóstico de idioma

Estou apenas imaginando, se um segmento está em uma seção crítica, ele pode ser antecipado?

  • Tópico A: Insira CR
  • Tópico A: Seja suspenso
  • Rosca B: Deseja inserir CR, mas não pode, porque Tópico A tem a fechadura

E se Tópico A antecipado, e assim o bloqueio mutex é preso com Tópico A, O que pode ser feito sobre isso?

Respostas:

5 para resposta № 1

Claro que pode ser antecipado.Caso contrário, como os outros encadeamentos poderiam tentar entrar nessa seção crítica, se o único encadeamento que pode ser executado dentro do processo é o encadeamento que possui a seção crítica?

A linha B em seu exemplo irá esperar até a linha Aé reprogramado e finalizado com a seção crítica. Nenhuma surpresa aqui. E se o thread A, enquanto em uma seção crítica, também espera por um mutex pertencente ao thead B, então é um deadlock que você deve resolver revisando sua lógica.


6 para resposta № 2

Suponha que o thread A seja prejudicado por uma prioridade mais altathread C. Agora, suponha que o thread B tenha de fato uma prioridade mais alta do que C. Se B se tornar executável, você terá um caso clássico de inversão de prioridade; O thread B (alta prioridade) está parado esperando por um recurso mantido pelo Thread A (baixa prioridade). Uma cura para isso é chamada de herança de prioridade.

Com herança de prioridade, quando B bloqueia para orecurso mantido por A (a seção crítica), o encadeamento A "herda" temporariamente a prioridade do encadeamento B. Isso permite que A cancele aquele enfadonho encadeamento de prioridade média C e, quando A terminar com o recurso, A volta ao seu original prioridade. Isso tira A do caminho de B, por assim dizer, eliminando o bloqueio.