处理并发访问单个二维数组单元的最佳方式

问题描述 投票:0回答:0

假设我有一个 2D 数组,表示带有道路的地形。接下来,假设我在这样的环境中派遣了 n 个代理。每个代理人都可以在路上行走并用自己的 ID 标记它。如果一个代理人看到一条标有另一个代理人 ID 的道路,它不应该继续搜索,因为这会浪费时间(因为另一个代理人一直在搜索那条路)。

我考虑过创建一个二维互斥锁数组,每个互斥锁对应于地形数组中道路上的一个字段,但这似乎是一种资源浪费,而且在每个路径遍历操作上设置/取消设置新的互斥锁似乎是计算性的昂贵的。 如何更稀疏地创建互斥锁?就像在道路上创建互斥锁“检查站”一样?这似乎是代理人不必要地游荡和不断锁定/解锁之间的妥协。

我还考虑过忽略竞争条件,希望智能体有另一次机会看到其他智能体已经通过那条路。

我应该如何正确处理这个问题?是否有另一种不涉及大量互斥锁/信号量等的正确方法? 我是并发编程的新手,我觉得我的解决方案是不好的做法。

multithreading algorithm multidimensional-array concurrency computer-science
© www.soinside.com 2019 - 2024. All rights reserved.