Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 我应该在主管-工人模型中使用内存围栏吗?_Multithreading_Mutex_Memory Fences - Fatal编程技术网

Multithreading 我应该在主管-工人模型中使用内存围栏吗?

Multithreading 我应该在主管-工人模型中使用内存围栏吗?,multithreading,mutex,memory-fences,Multithreading,Mutex,Memory Fences,我正在为我的应用程序构建多线程支持 在我的应用程序中,可能会发生这样的情况:一个工人应该访问另一个工人的“工作字段”来完成自己的工作。我曾尝试使用pthread互斥体来保证安全性,但结果证明它们的速度非常慢,即使只有一个工作线程并且没有争用 所以,我想出了另一个主意。让一个工人尽其所能完成其工作,然后将有上述问题的工作添加到(每个工人,自己的)队列中:当所有工人都完成时,主主管线程将完成未完成的工作,希望这些工作将比工人完成的工作数量少几个数量级 我的问题是:在我将执行权从主管转移到工人,反之亦

我正在为我的应用程序构建多线程支持

在我的应用程序中,可能会发生这样的情况:一个工人应该访问另一个工人的“工作字段”来完成自己的工作。我曾尝试使用pthread互斥体来保证安全性,但结果证明它们的速度非常慢,即使只有一个工作线程并且没有争用

所以,我想出了另一个主意。让一个工人尽其所能完成其工作,然后将有上述问题的工作添加到(每个工人,自己的)队列中:当所有工人都完成时,主主管线程将完成未完成的工作,希望这些工作将比工人完成的工作数量少几个数量级

我的问题是:在我将执行权从主管转移到工人,反之亦然的时候,我是否应该设置一个记忆栅栏

编辑: 更多详细信息(代码已打开,请参阅pool::collision\u wsc()。每个线程从不同的“单元”(基本上是std::vector)读取指针,并对指向的对象应用一些操作(硬球之间的碰撞)


关键是一个单元格与其(某些)相邻单元格进行交互,但其中一些单元格可能属于另一个工作者(一个球体可能靠近单元格边界,并与另一个单元格碰撞)。

需要更多详细信息。正确使用线程需要了解整个系统。@usr然后问一些具体的问题,因为我不知道您还需要什么其他信息。如果你真的有一些血淋淋的细节,代码就在github上,我尝试并行化的函数是pool::timestep和pool::collision_wsc@usr问题中的更多细节。