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

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

本文关键字:线程 之间 共享 数据 进程 C++      更新时间:2023-10-16

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

目前,我使用线程而不是fork进程,但即使我将变量声明为volatile,我在共享变量方面也遇到了问题。

我尝试过助推做:

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

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

我想做的是:

thread1:
while(true){
//..do somet stuff
check variable1
}
thread2:
while(true){
do some other stuff
check and write on variable1
}

你能给我推荐一个教程或方法来轻松地在线程之间共享变量吗?在这种情况下,boost库可能有用吗?你认为使用fork()更好吗?

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

如果可以使用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
}

如果使用posix线程库(我建议使用),则使用pthread_mutex_t。

pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;

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

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

任何类型的互斥锁或解锁都可以工作。就你关于volatile的问题而言,这个关键字是一个很好的练习,尤其是在像你这样的多线程程序中。但它不会影响您锁定和解锁的方式。volatile只是告诉编译器不要优化变量,例如将其放入寄存器。这里有一个很好的解释:

http://drdobbs.com/cpp/184403766