假设我有一个指向指针的指针,即int *** ptr,它拥有一个三维数组。根据CPU的不同,我希望大约有三个线程同时写入和读取指针。为了简单起见,ptr不会被重新定义(如果我不得不重新指定指针,我仍然想知道如何处理多线程)。我想同时写入指针而不必使用互斥锁,因为它会阻塞其他线程。我该怎么办?我仍然不太了解原子模板的分类......
谢谢! :)
答案 0 :(得分:1)
这取决于你的线程如何运行。
所有线程都可以从给定位置读取而不会发生冲突,但它正在更改一个值(同时更改值,在更改时读取值,或使用已更改的读取值)这是问题所在
如果你已经保证线程之间不会改变任何值(例如,线程1写入ptr [0] [0] [x],线程2 ptr [0] [1] [x],线程3 ptr [0] [2] [x])你实际上根本不需要做任何互斥。
如果您没有这种保证,那么您必须对每次读取和写入值进行互斥。
Redimensioning本质上是改变指针值。因此,如果只有一个线程必须处理正在更改的指针值,则不必担心它。否则,每次读写都会互斥。因此,如果只有1个线程访问ptr [0] [0],并且你需要调整ptr [0] [0]的大小,那么你就是金色的。
如果您没有这种保证,那么您必须对每次读取和写入值进行互斥。