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
risposta
Boost ha una coda senza blocco: http://www.boost.org/doc/libs/1_56_0/doc/html/lockfree.html.
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
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
È possibile considerare tbb. 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 ppl all'interno di MS VS 2010.
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
- 1. Passaggio di dati tra thread ThreadPool
- 2. Passaggio di dati tra oggetti in C#
- 3. Passaggio di dati JUnit tra prove
- 4. C# Comunicazione tra thread
- 5. Passaggio di valori tra Windows Form C#
- 6. passaggio di dati tra java e python
- 7. Servizio AngularJS Passaggio di dati tra controllori
- 8. Julia: passaggio di dati tra coroutine (attività)
- 9. Passaggio di strutture di dati a thread diversi
- 10. C++, come condividere i dati tra processi o thread
- 11. Implementazione delle funzioni di estensione C per PostgreSQL: come faccio? (passaggio di dati tra C/PostgreSQL)
- 12. Thread in C# - Inserimento di messaggi tra thread
- 13. Passaggio di dati tra i frammenti di attività
- 14. Passaggio di dati tra controller di interfaccia in WatchKit
- 15. Architettura a 3 livelli - passaggio di dati tra i livelli
- 16. Android: passaggio di dati tra servizio e attività
- 17. Passaggio dei dati di sessione tra le applicazioni ASP.NET
- 18. Passaggio di dati tra 2 UIViewController utilizzando delegato e protocollo
- 19. Best Practices per il passaggio di dati tra le pagine
- 20. Magento - Passaggio di dati tra un controller e un blocco
- 21. Passaggio di dati tra le pagine in AngularJS + Aggiornamento pagina
- 22. Passaggio di molti dati dal programma Python al programma C
- 23. Invio di grandi quantità di dati tra thread Qt
- 24. Java: passaggio al thread principale?
- 25. Threading, comunicazione tra due thread C#
- 26. std :: thread C++. Più discussioni stessi dati
- 27. Passaggio di eccezioni tra due programmi C# utilizzando JSON
- 28. Dati principali - condivisione di NSManagedObjects tra più thread
- 29. Propagazione di eccezione tra thread?
- 30. instantiateViewControllerWithIdentifier e dati di passaggio
Imparare dal seguente link: http://stackoverflow.com/questions/20595760/c-communication-between-threads –