Ho un programma che esegue due diverse operazioni e mi piacerebbe condividere le variabili tra di loro.C++, come condividere i dati tra processi o thread
Al momento, sto utilizzando thread anziché processi fork ma sto riscontrando problemi nella condivisione di variabili anche se li ho dichiarati volatili.
ho cercato con boost fare:
boost::thread collisions_thread2(boost::bind(function_thread2);
dichiarando le variabili condivise come volatile, ma sembra che la funzione function_thread2() non è in grado di vedere i cambiamenti sulle variabili condivise.
Quello che mi piacerebbe fare è qualcosa di simile:
thread1:
while(true){
//..do somet stuff
check variable1
}
thread2:
while(true){
do some other stuff
check and write on variable1
}
Mi potete suggerire un tutorial o un metodo per condividere facilmente variabile tra i thread? La libreria boost può essere utile in questo caso? Pensi che sia meglio usare fork()?
So che devo usare il mutex per evitare situazioni critiche, ma non l'ho mai usato.
Verificare se [questa domanda] (http://stackoverflow.com/questions/118199/c-thread-shared-data) aiuta. E alla fine [Boost Thread Synchronization] (http://www.boost.org/doc/libs/1_49_0/doc/html/thread/synchronization.html) – jweyrich
volatile non ha nulla a che fare con i thread –
Non hai nemmeno bisogno di ' volatile' per condividere variabili. Le variabili globali sono condivise per impostazione predefinita. Ma è una cosa brutta in quanto rende facile la creazione di gare di dati. Quando hai gare di dati, non puoi aspettarti che il tuo programma si comporti ragionevolmente, quindi probabilmente ti imbatterai in una varietà di questo. Dovrai pubblicare più del tuo codice reale per ottenere aiuto nella diagnosi delle gare di dati. – bames53