Цитата(KRS @ May 15 2008, 16:16)

Без mutex есть потенциальные проблемы:
если между проверкой и очисткой возникнет еще одно событие вы его потеряете потому что обнулите args->event.flag = 0;
да, опять вы правы.
к тому же не лишним будет это
Код
res = pthread_cond_timedwait(&args->event.event, &args->event.lock, &tm);
if (res == ETIMEDOUT)
{
pthread_cancel(созданный ранее поток, от которого ожидается сигнал);
return ERR_TIMEOUT;
}