Переменные условия позволяют вам ожидать определенного события и иметь другой поток, который сигнализирует эту переменную условия.
У вас может быть тема, которая делает это:
for (;;)
{
if (avail() > 0)
do_work();
else
pthread_cond_wait();
}
и другой поток, который делает это:
for (;;)
{
put_work();
pthread_cond_signal();
}
Очень упрощенно, конечно. :) Вам нужно будет посмотреть, как правильно его использовать, есть некоторые трудности при работе с переменными условия из-за условий гонки.
Однако, если вы уверены, что поток будет блокироваться в течение очень короткого времени (порядка мкс) и редко, использование подобной спиновой петли, вероятно, будет более эффективным.