volatile array c ++

时间:2011-07-28 20:06:22

标签: c++ multithreading volatile

我的应用程序有一个指向MyObject个对象的指针数组:

MyObject **arr;
arr= new MyObject*[10];

应用程序有两个线程,这些线程将创建并删除new MyObject()到数组arr。因此arr[n]会一直更改,但MyObject本身不会更改。

我应该声明:

volatile MyObject **arr;

或者我应该选择:

MyObject ** volatile arr;

提前致谢

2 个答案:

答案 0 :(得分:4)

我认为你需要MyObject * volatile * arr;

请注意,volatile是原子变量或有效的同步方法。

编辑:这是:http://drdobbs.com/high-performance-computing/212701484

答案 1 :(得分:2)

我认为你在这里使用volatile是错误的。来自Wikipedia

在C中,因此在C ++中,volatile关键字旨在

  • 允许访问内存映射设备
  • 允许在setjmp和longjmp之间使用变量
  • 允许在信号处理程序中使用sig_atomic_t变量。

我注意到这是标记的多线程。英特尔有一篇关于为什么volatile是mostly useless in multithreading的好文章。

最后,volatile MyObject **arr;是正确的语法 - 如果这是你的最终意图。