0

是否有任何获取自定义类的示例,包括大型数组作为共享内存中的属性?我需要从同一进程中的不同线程进行读/写访问。类实例的大小在编译时是未知的。在我的情况下,不允许使用 OpenMP 解决方案,只需赢得 32 API 或本机 C++ 功能。

4

1 回答 1

2

您不需要为此共享内存。一个 c++ 进程中的所有内存都是隐式共享的,并且所有线程都可以访问它们,只要它们知道它的地址。

您真正需要的是同步,以便线程以正确的顺序访问对象(没有竞争条件)。你的对象应该实现所谓的 监控模式。

在 c++ 中,您可以像这样手动执行此操作

  • 将(win32 API)互斥锁作为对象的成员
  • 在每个方法的最开始锁定这个互斥锁
  • 在方法退出时解锁它。最好使用栈上的locker对象来处理异常。

(在某些语言中,您可以只声明方法或对象同步,但在 C++ 中,您可以手动执行此操作)

或者使用更高级别的并行模式,例如“阅读器/作者”。我更喜欢消息传递

于 2013-05-18T23:17:13.787 回答