1

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

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

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

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

4

2 回答 2

2

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

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

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

于 2013-04-20T11:35:16.293 回答
1

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

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

如果您可以访问 C++11,请尝试使用std::atomic<T> 类型,它可以让您共享具有原子访问语义的原始类型。

于 2013-04-20T12:09:57.883 回答