Вы должны вызывать pthread_cond_wait
, только если переменная уже находится в «неправильном» состоянии. Поскольку он всегда ожидает, всегда есть издержки, связанные с переводом текущего потока в спящий режим и переключением.
Когда поток не запланирован, он не запланирован. Он не должен использовать какие-либо ресурсы, но, конечно, теоретически ОС может быть плохо реализована. Разрешается повторно получать мьютекс и даже возвращать его перед сигналом (поэтому необходимо дважды проверить условие), но ОС будет реализована, поэтому это не сильно повлияет на производительность, если это произойдет при все. Это происходит не самопроизвольно, а скорее в ответ на другой, возможно, не связанный сигнал.
30000 мьютексов не должно быть проблемой, но некоторые ОС могут иметь проблемы с 30000 спящими потоками.