【发布时间】:2011-10-17 19:41:09
【问题描述】:
我正在尝试开发一个由线程池组成的应用程序,使用工作窃取算法并发执行任务。
这些任务
- 访问一组预定义的对象;
- 在实际运行之前,必须“原子地”获得对其访问的所有对象的读/写权限;
- 完成后(并保证最终完成)释放他们获得的对象。
解决此问题的一种可能方法是让每个线程一次执行一项任务,然后尝试使用预定义的顺序锁定每个对象。如果至少有一个失败,则释放所有锁,然后继续执行另一项任务。
然而,这种方法会增加具有大对象依赖性的任务饿死的可能性,甚至可能导致活锁。
是否有另一种方法可以在最大化并发的同时获取一组锁? (没有全局锁)或者可能以不再需要的方式更改系统? 如果是这样,有什么好的论文吗?
ps:正如 thiton 所回答的,这是“哲学家就餐”问题的一般化版本。我正在寻找非集中式解决方案,特别是在高负载(添加和删除任务)中表现良好的算法。
【问题讨论】:
标签: concurrency scheduled-tasks scheduling mutual-exclusion