C++,如何在进程或线程之间共享数据
C++, how to share data between processes or threads
我有一个程序,它运行两个不同的操作,我想在它们之间共享变量。
目前,我使用线程而不是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
相关文章:
- 在cuda线程之间共享大量常量数据
- 线程之间的布尔停止信号
- 线程之间的实时数据共享
- 线程之间的通信不起作用 - C++
- 简单使用 std::atomic 在两个线程之间共享数据
- 不同线程之间的互斥锁同步
- 多个线程之间的获取-释放内存顺序
- 如何在两组线程之间正确来回传输控制权
- 如果两个线程调用同一个函数,但函数中的所有变量都是局部变量,我还需要担心线程之间共享数据吗?
- 填充和保存线程之间的共享缓冲区
- 在C 中共享线程之间的列表
- 在 API 和应用程序线程之间共享数据
- 将线程之间的标准输入/输出重定向
- Boost::线程如何在主线程和工作线程之间同步
- std::线程之间的互斥体同步
- C++ - 多线程 - 线程之间的通信
- Qthread char阵列在两个线程之间传递后被摧毁
- 线程之间类的静态数据共享
- 增强ASIO和线程之间的消息传递
- 将数组分配在固定数量的线程之间