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

Multithreading library that can share pointer data safely?

本文关键字:数据 多线程 指针 共享 安全      更新时间:2023-10-16

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

有没有库可以在Windows操作系统中完美地实现这一点?

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

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

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

所有程序需要确保的是保护这样的"共享"内存不被并发访问。

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

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

 WaitForSingleObject(mutexHandle);
 // shared data access & modification
ReleaseMutex(mutexHandle);
  • CreateMutex
  • WaitForSingleObject
  • 教程

如果您可以访问c++ 11,请尝试使用std::atomic<T>类型,它允许您与原子访问语义共享基本类型。

  • std::原子