Come posso attendere su più processi tra gli utenti?

1

Ho del codice nel processo A che deve attendere il completamento del lavoro in altri processi che possono essere eseguiti simultaneamente sotto più utenti.

Non sono sicuro quale sia il meccanismo di sincronizzazione appropriato. Ho ingenuamente pensato che un semaforo di nome globale sarebbe stata la risposta, ma i semafori sono segnalati quando qualcuno li rilascia, e vorrei aspettare fino a quando tutti i client li rilasciano, o si verifica un timeout.

Domanda : esiste un meccanismo di sincronizzazione appropriato per questo scenario?

    
posta Craig 05.05.2017 - 01:59
fonte

3 risposte

1

Penso che una pipe denominata e in attesa di messaggi di conferma dai processi n dovrebbero funzionare (ad esempio, il supervisore attende i messaggi n sulla pipe). Ciò avrebbe il vantaggio di consentire la pubblicazione di un risultato complesso invece di una semplice notifica, se necessario.

    
risposta data 14.05.2017 - 01:18
fonte
1

Una possibilità (purché tu non abbia un enorme numero di compiti) è avere una serie di eventi, uno per ogni compito.

Ogni processo figlio può impostare l'evento associato quando termina il suo compito. Il genitore usa WaitForMultipleObjects (passando true per il parametro bWaitAll ) per aspettare che siano tutti completati.

    
risposta data 13.05.2017 - 21:44
fonte
1

Sembra un modello di scrittore singolo con più lettori. Credo che sia necessario un semaforo e un mutex (o due) per farlo funzionare correttamente.

    
risposta data 14.05.2017 - 01:53
fonte

Leggi altre domande sui tag