Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++, how to share data between processes or threads

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.

like image 970
Marcus Barnet Avatar asked Feb 29 '12 19:02

Marcus Barnet


2 Answers

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
}
like image 87
kamae Avatar answered Sep 23 '22 13:09

kamae


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);
like image 44
Jonathan Henson Avatar answered Sep 22 '22 13:09

Jonathan Henson