2014-11-19 28 views
5

Ho un pool di thread costituito da 4 thread: t1, t2, t3 e t4. Sono in esecuzione contemporaneamente, ma l'input da t3 e t4 dipende dall'output di t2. Come devo implementare la coda dei messaggi in modo che dopo il completamento di t2, invii i dati di output a t3 e t4 per l'elaborazione? Ho cercato di implementare la coda dei messaggi utilizzando il meccanismo di blocco, ma sembra che il blocco sia piuttosto costoso. C'è un meccanismo lock-free che passa i dati tra i thread? Sto utilizzando boost :: thread in visual studio 2010.C++ - Passaggio di dati tra thread

+1

Imparare dal seguente link: http://stackoverflow.com/questions/20595760/c-communication-between-threads –

risposta

3
+0

Hi Tomo, per il mio caso sia T3 e T4 hanno bisogno di ottenere i dati di uscita da T2. Quindi, mi chiedo chi ritirerà i dati dalla coda dei messaggi? Dovrebbe essere t2 perchè non siamo sicuri se t3 o t4 saranno completi per primi? Intendo ogni volta che t2 accoda nuovi dati, eseguirà anche la cancellazione. – Bent

+0

Sì, t2 dovrebbe mettere il suo output nella coda. T3 e T4 dovrebbero controllare periodicamente se c'è qualcosa nella coda da elaborare. Supponendo che t3 e t4 abbiano altre cose da fare. In caso contrario (il loro unico compito è attendere l'output di t2 e processarlo), dimenticarsi delle code prive di lock e andare con una soluzione di blocco. Se i fili devono comunque aspettare, il costo del blocco non dovrebbe essere motivo di preoccupazione. – Tomo

1

È possibile considerare . Fornisce una vasta gamma di concetti paralleli tra cui concurrent_queue, concurrent_bounded_queue (per l'attesa), pipeline, flow::graph. I primi due sono disponibili anche in all'interno di MS VS 2010.

+0

Ciao Anton, grazie per aver risposto! Perché attualmente il mio progetto utilizza boost lib, quindi mi concentrerò maggiormente sull'aumento. Ma darò un'occhiata anche a TBB se non trovo alcuna soluzione. :)) – Bent

Problemi correlati