Я думаю, вы должны переосмыслить то, что вы пытаетесь сделать. Если вы пытаетесь оптимизировать свою производительность, вы, вероятно, лаем неправильное дерево.
pthread_cond_signal()
не гарантируется даже разблокировать ровно одну нить - это гарантированно разблокировать по крайней мере один нить, так что ваш код лучше быть в состоянии справиться с ситуацией, когда несколько потоков одновременно разблокированы. Типичный способ сделать это - для каждого потока повторить проверку состояния после того, как он будет разблокирован, и, если false, снова вернется к ожиданию.
Вы можете реализовать какую-то схему, в которой вы сохранили свою очередь приоритетных ожидающих потоков, и каждый поток добавил себя в эту очередь непосредственно перед тем, как начать ожидание, а затем он будет проверять очередь при разблокировке, но это добавили бы большую сложность и много возможностей для серьезных проблем (условия гонки, тупики и т. д.). Это также добавило нетривиальное количество накладных расходов.
Кроме того, что произойдет, если поток с более высоким приоритетом начинает ожидать переменную условия в тот же момент, когда сигнализируется переменная условия? Кто получает разблокировку, новоприбывший высокоприоритетный поток или прежний поток с наивысшим приоритетом?
Порядок, в котором потоки разблокируются, полностью зависит от планировщика потоков ядра, поэтому вы по своему усмотрению. Я даже не предполагал бы заказать FIFO.