mutex并不一定自带唤醒机制。
不过linux内核的mutex在无法得到锁的时候,会把自己加入一个waiter队列后进入等待状态。unlock的时候,解锁后会从这个waiter队列中取一个加入到调度器的就绪队列。但需要注意的是,即使这个任务加入到调度器后被立刻唤醒,也不意味着它就一定能得到这个锁,因为此时已经处于解锁状态,大家公平的抢而已。
所以,本质上mutex并不保证在A线程解锁后,立刻就有正在等待这个锁的线程被唤醒去抢这个锁——这个唤醒过程是任务调度器的问题。
而唤醒了之后能不能真的抢到锁,也是不确定的——哪怕是在单核的系统上也是如此(你不能保证你是第一个被唤醒的)。
最后,正常的生产者消费者模型,要避免无谓的重复竞争,难道不应该用semaphore(信号灯)吗?