Multithreading 快速并行拾取/检查某些ID(考虑战利品延迟的非游戏应用)

Multithreading 快速并行拾取/检查某些ID(考虑战利品延迟的非游戏应用),multithreading,performance,algorithm,thread-safety,multiprocessing,Multithreading,Performance,Algorithm,Thread Safety,Multiprocessing,因此,我正在验证新的操作管理系统,其中一个操作系统会将选择列表发送给可扩展的手持设备。它使用消息发送这些任务,它们的选择列表可能包含重叠的任务。因此,在我的虚拟世界中,我需要确保两个模拟人不会选择同一个工作-每当有人选择一个工作时,所有的工作列表都会刷新,这样所选择的工作就不会再出现在任何其他人的手持设备上,但对我来说,消息仍然在正在处理的队列中,因此我必须确保放弃该选项 基本上,我有一个带有互斥锁的巨大列表,点击它的“人”越多,我处理消息的速度就越慢,以至于我不再是实时的,这很糟糕,因为我无法

因此,我正在验证新的操作管理系统,其中一个操作系统会将选择列表发送给可扩展的手持设备。它使用消息发送这些任务,它们的选择列表可能包含重叠的任务。因此,在我的虚拟世界中,我需要确保两个模拟人不会选择同一个工作-每当有人选择一个工作时,所有的工作列表都会刷新,这样所选择的工作就不会再出现在任何其他人的手持设备上,但对我来说,消息仍然在正在处理的队列中,因此我必须确保放弃该选项

基本上,我有一个带有互斥锁的巨大列表,点击它的“人”越多,我处理消息的速度就越慢,以至于我不再是实时的,这很糟糕,因为我无法真正验证系统,因为我无法跟上消息。(同一个岛上的两个家伙会意识到其中一个要挑选一件物品,下一个家伙应该挑选第二件物品,但我需要检查我要挑选的每一件工作,看看是否已经有其他人认领了)

我曾经考虑过列表的本地化装箱,但实际上它并不能解决这个问题,因为在一个愚蠢的案例中,成千上万的人在同一行工作。当然,这对现实生活中的人们来说可能也会感到困惑,因为在现实生活中,他们需要做同样的解决方案,但我很好奇,目前公认的解决这个问题的“最佳”方案是什么

PS——我已经在C++中实现了这一点,它的速度很快,在任何实际测试中我都不需要回答这个问题,这更多的是因为我很好奇我在问。


提前谢谢

我发现设计“带(一)个互斥体的巨大列表”中存在一个问题。如果列表大小和/或访问速率不受限制,则无法以同步方式提供整个列表。基础数学对你不利。因此,我要做的是在每个作业上设置一个静音标志。您不能阻止某个作业显示在某人的屏幕上,但您可以确保他收到一个优雅的“不再可用”错误,然后是更新的列表。如果您曾经想在非常流行的gig上预订座位,您可能已经看到了解决方案。

我可能没有正确地理解这个问题,但如果是,也许可以使用无锁哈希表?(假设每个作业都有一个唯一的ID,哈希表将为您提供O(1)次查找和删除时间,这可能就足够了;如果没有,您可以找到一个无锁哈希表,这样您就可以避免互斥锁并允许从多个线程并发访问该表;请注意,无锁数据结构可能很难做到100%正确)