I have a program which runs two different operations and i'd like to share variables between them.
At the moment, i'm using threads instead of fork processes but i'm having problems in sharing variables even if I declared them as volatile.
I tried with boost doing:
boost::thread collisions_thread2(boost::bind(function_thread2);
by declaring the shared variables as volatile, but it seems that function_thread2() function is not able to see changes on the shared variables.
What i'd like to do is something like:
thread1:
while(true){
//..do somet stuff
check variable1
}
thread2:
while(true){
do some other stuff
check and write on variable1
}
Can you suggest me a tutorial or a method to easily share variable between threads? May be boost library can be useful in this case? Do you think it's better to use fork()?
I know that i have to use mutex in order to avoid critical situations, but i never used it.
If you can use boost
, you can use boost::mutex
.
// mtx should be shared for all of threads.
boost::mutex mtx;
// code below for each thread
{
boost::mutex::scoped_lock lk(mtx);
// do something
}
If using the posix threading libs (which I recommend) then use pthread_mutex_t.
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;
Then, in each thread when you want to synchronize data access:
pthread_mutex_lock(&lock);
//access the data
pthread_mutex_unlock(&lock);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With