¿Implementación de eventos de Windows en Linux usando variables condicionales?

Estoy tratando de implementar eventos de Windows muy simples en Linux. Solo para mi escenario - 3 hilos, 1 principal y 2 secundarios. Cada uno de los subprocesos secundarios genera 1 evento por SetEvent y el subproceso principal lo espera. Ejemplo:

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
}

Entonces, para implementarlo, uso variables condicionales. Pero mi pregunta es: ¿es esto un camino correcto? ¿O estoy haciendo algo mal? Mi implementación:

// 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);

Y todo parece bien, pero creo que ese problema aparecerá cuando llame a la función WaitFor .. en el hilo principal antes de que se llame a SetEvent en el hilo secundario. En Windows funcionó bien, pero en Linux, la idea solo se describe más arriba.

Tal vez usted me diga la mejor manera de resolverlo? Gracias.

UPD: El tiempo de espera es muy importante, porque uno de los subprocesos secundarios no puede pasar SetEvent ().

Respuestas a la pregunta(3)

Su respuesta a la pregunta