【发布时间】:2014-02-03 18:22:03
【问题描述】:
假设我有一个指向指针的指针,即 int*** ptr,它包含一个三维数组。根据 CPU,我希望有大约三个线程同时写入和读取我的指针。为简单起见,不会对 ptr 进行重新调整(如果必须重新调整指针的大小,我仍然想知道如何处理多线程)。我想同时写入指针而不必使用互斥锁,因为它会阻塞其他线程。我该怎么做?原子模板类我还是不太懂……
谢谢! :)
【问题讨论】:
-
互斥锁是您将处理并发的方式...如果您要更改指针指向的位置,您不希望其他线程查看错误的位置。 ..
-
其实我并没有改变指针本身;我正在更改指针指向的值。例如:ptr[0][0][0] = something.
-
@user2924010 如果你真的没有调整大小,即:你基本上有一个带有运行时值的
myArray[x][y][z],那么你应该可以使用std::atomic<int>。这样,所有元素都可以“安全”地读取和写入。如果必须更改任何数组,那么您将需要同步(互斥体)。您可以考虑将其包装在一个类型中以处理此外部客户端代码。 -
@FrançoisMoisan "safe" 是正确的,但它可能会应用最终用户不需要的安全性,这会减慢代码并使其变得更加庞大。
-
@MadScienceDreams 正确,但他应该意识到这一点。他可能仍然会遇到问题,因为他同时在谈论阅读/写作。
标签: c++ multithreading pointers multidimensional-array