Mutexes são usados para proteger seções críticas. Digamos que um down já tenha sido feito em um mutex, e enquanto o thread que fez isso está no CS, 10 outros threads estão logo atrás dele e fazem um down no mutex, colocando-se para dormir. Quando o primeiro thread sai da seção crítica e faz um up no mutex, todos os 10 threads acordam e apenas retomam o que eles estavam prestes a fazer, ou seja, entrar na seção crítica? Não significaria então que todos os 10 poderiam acabar na crítica seção ao mesmo tempo?
Respostas:
1 para resposta № 1Não somente 1 thread vai acordar e se apropriar do mutex. O resto deles permanecerá dormindo. Qual segmento é aquele que acorda é geralmente não-determinístico.
O acima é uma generalização e os detalhes da implementação serão diferentes em cada sistema. Por exemplo, em Java compare Objeto # notify () e Objeto # notifyAll ().