Atualmente, estou lendo Fuss, Futexes e Furwocks: Fast Userland Locking no Linux e me deparei com esta citação:
Em um esquema de bloqueio justo, o bloqueio é concedido na ordem em que foi solicitado. Isso pode ter um impacto negativo na taxa de transferência devido ao aumento do número de alternâncias de contexto. Ao mesmo tempo, pode levar ao chamado problema do comboio. Como os bloqueios são concedidos na ordem de chegada, todos prosseguem na velocidade do processo mais lento, diminuindo a velocidade de todos os processos em espera. Uma solução comum para o problema do comboio foi marcar o bloqueio disponível após a liberação, ativar todos os processos em espera e solicitá-los que recontendessem o bloqueio. Isso é chamado de justiça aleatória. No entanto, isso também leva ao problema do rebanho estrondoso. Apesar disso, ele pode funcionar bem em sistemas de processador único, se a primeira tarefa a ser ativada libera o bloqueio antes de ser antecipada ou agendada, permitindo que o segundo membro do rebanho obtenha o bloqueio, etc.
Eu tenho algumas perguntas sobre esta citação.
Primeiro, um esquema de bloqueio justo resulta em um número aumentado de alternâncias de contexto porque tarefas diferentes colocam processos na fila de espera em momentos diferentes e, portanto, servindo os processos na ordem em que foram recebidos, alternamos o contexto entre várias tarefas?
Segundo, como conceder bloqueios na ordem de chegada faz com que os processos prossigam na velocidade do processo mais lento? Esse não seria o caso apenas se o processo mais lento receber o bloqueio antes dos outros processos? Da mesma forma, como ter processos disputando aleatoriamente o bloqueio resolve o problema do comboio?
Finalmente, não entendo como a justiça aleatória é melhor em sistemas uni-processadores em comparação com sistemas multiprocessadores. Por exemplo, em ambos os casos, todos os processadores em espera são acordados, um fica com o cadeado e os outros precisam dormir novamente, certo? Então, como isso funciona bem em sistemas uni-processadores?