0

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

在我的应用程序中,一个工作人员可能会访问另一个工作人员的“工作区”来完成自己的工作。我曾尝试使用 pthread 互斥锁来确保这一点安全,但结果证明它们非常慢,即使只有一个工作人员并且没有争用。

所以,我想出了另一个主意。让一个worker在可能的地方完成它的工作,然后将存在上述问题的工作添加到(per-worker,own)队列中:当所有工作人员都完成后,主监督线程将完成未完成的工作,在希望它们将比工人完成的工作数量少几个数量级。

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

编辑:更多细节(代码在github 上,参见 pool::collision_wsc())。每个线程从各种“单元”(基本上是 std::vector)读取指针,并对指向的对象应用一些操作(硬球体之间的碰撞)。

关键是一个细胞与它的(一些)邻居交互,但其中一些细胞可能是另一个工人的所有权(一个球体可能靠近一个细胞的边界,并与另一个细胞中的一个发生碰撞)。

4

0 回答 0