可以安全共享指针数据的多线程库?

时间:2013-04-20 11:26:04

标签: c++ c windows multithreading

基本上我想要实现的是在不同的线程之间共享动态分配的状态标志数组,以控制线程之间的交互。

是否有任何库可以在Windows操作系统中完美实现?

我试过Open MP,它给了我各种奇怪的错误和很多头痛,即使使用omp flush,有时数据仍然不是最新的,当访问频率很高时,volatile指针也没有帮助,所以程序变得非常不稳定和不一致。

是否有任何库可以更好地处理共享和频繁更新和访问的数据阵列(动态)? TBB可以处理这种情况吗?

2 个答案:

答案 0 :(得分:2)

同一进程的线程共享同一个堆,因此可以在这些线程之间共享在此堆上分配的内存。

所有程序都需要保护这种“共享”内存免受并发访问。

后者可以通过使用锁来实现,如互斥锁。

答案 1 :(得分:1)

常见的解决方案是使用互斥锁。基本思想是用关键部分包装对共享变量的任何访问,即。互斥锁:

 WaitForSingleObject(mutexHandle);
 // shared data access & modification
ReleaseMutex(mutexHandle);

如果您有权访问C ++ 11,请尝试使用std::atomic<T>类型,这样就可以与原子访问语义共享基本类型。