Столкнулся с такой проблемой. Есть многопоточная программа. Один из тредов работает по следующему циклу: 1. Залочить мьютекс 2. Поработать 3. Отдать мьютекс 4. sched_yield, т.к. после этого выполятеся 1, т.е. мьютекс бы сразу залочился, что не дало бы возможности поработать другому треду
Но недавно на одной из систем обнаружил, что sched_yield не отрабатывает, как ожидается. Т.е. другой поток перехватывает мьютекс только, если ему очень повезет.
Пока, как временное решение, заменил на usleep(1).
В инете нашел, что вроде как и вправду не на всех ядрах этот вызов работает, как следует... Может, аналитики ЛОРа просветят более подробно?