C ++,如何在进程或线程之间共享数据

时间:2012-02-29 19:08:34

标签: c++ multithreading fork

我有一个运行两个不同操作的程序,我想在它们之间共享变量。

目前,我正在使用线程而不是fork进程,但即使我将它们声明为volatile也存在共享变量的问题。

我尝试使用boost:

boost::thread collisions_thread2(boost::bind(function_thread2);

通过将共享变量声明为volatile,但似乎function_thread2()函数无法看到共享变量的变化。

我想做的是:

thread1:

while(true){
//..do somet stuff
check variable1
}

thread2:

while(true){
do some other stuff
check and write on variable1
}

你能建议我在线程之间轻松共享变量的教程或方法吗? 可能是boost库在这种情况下有用吗? 你认为使用fork()更好吗?

我知道我必须使用互斥锁以避免危急情况,但我从未使用它。

3 个答案:

答案 0 :(得分:2)

如果使用posix线程库(我推荐),那么使用pthread_mutex_t。

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

然后,在每个线程中,当您想要同步数据访问时:

pthread_mutex_lock(&lock);
//access the data
pthread_mutex_unlock(&lock);

答案 1 :(得分:2)

如果您可以使用boost,则可以使用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
}

答案 2 :(得分:1)

任何类型的互斥锁或解锁都可以。至于你关于volatile的问题,这个关键字是一个很好的做法,特别是在像你这样的多线程程序中。但它不会影响您锁定和解锁的方式。 volatile只是告诉编译器不要优化变量,例如:把它放在一个寄存器里。这是一个非常好的解释:

http://drdobbs.com/cpp/184403766