Implementação de eventos do Windows no Linux usando variáveis ​​condicionais?

Eu estou tentando implementar eventos muito simples do Windows no Linux. Apenas para o meu cenário - 3 tópicos, 1 principal e 2 secundários. Cada um dos encadeamentos secundários gera um evento por SetEvent e o encadeamento principal o aguarda. Exemplo:

int main()
{
    void* Events[2];
    Events[0] = CreateEvent();
    Events[1] = CreateEvent();

    pthread_start(Thread, Events[0]);
    pthread_start(Thread, Events[1]);

    WaitForMultipleObjects(2, Events, 30000) // 30 seconds timeout

    return 0;
}

int* thread(void* Event)
{
    // Do something
    SetEvent(Event);
    // Do something
}

Então, para implementá-lo, eu uso variáveis ​​condicionais. Mas a minha pergunta é - este é um caminho certo? Ou eu fazendo algo errado? Minha implementação:

// Actually, this function return pointer to struct with mutex and cond
// here i just simplified example
void* CreateEvent(mutex, condition)
{
    pthread_mutex_init(mutex, NULL);
    pthread_cond_init(condition, NULL);
}

bool SetEvent (mutex, condition)
{
    pthread_mutex_lock(mutex);
    pthread_cond_signal(condition);
    pthread_mutex_unlock(mutex);
}

int WaitForSingleObject(mutex, condition, timeout)
{
    pthread_mutex_lock(mutex);
    pthread_cond_timedwait(condition, mutex, timeout);
    pthread_mutex_unlock(mutex);
}

// Call WaitForSingleObject for each event. 
// Yes, i know, that its a wrong way, but it should work in my example.
int WaitForMultipleObjects(count, mutex[], condition[], timeout);

E tudo parece bom, mas eu acho que o problema aparecerá quando eu chamar WaitFor .. função no segmento principal antes de SetEvent no segmento secundário será chamado. No Windows, funcionou bem, mas no Linux - apenas a ideia é descrita acima.

Talvez você me diga a melhor maneira de resolvê-lo? Obrigado.

UPD: Tempo limite é muito importante, porque um dos segmentos secundários não pode passar SetEvent ().

questionAnswers(3)

yourAnswerToTheQuestion