多线程访问共享资源的优化问题

ruiruining2010 2014-12-17 01:21:47
是这样的

现在需要实现一个功能:

有一个任务池(task group),里面装载了当前需要执行的N个任务(task),每个任务由多级任务描述定义,例如任务名称(task name),执行时间(time policy)等等。各级信息的定义存储在各自的组内,例如任务名称组(task name group),时间策略组(time policy group)等等。

也就是说一个具体的任务(task)是从任务名称组和时间策略组各取一个对象组成的。任务的具体定义由客户端完成。

现在我是使用线程池(N个线程)来执行任务的,任务分发对象从任务池中取出一个任务,然后分配到一个工作线程中。

当前的问题是,这些任务多级描述定义能够被客户端随时修改,有一个线程负责接收响应,来具体的修改任务描述等信息。

那这肯定就会造成资源竞争,我在权衡之下,使用读写锁来保护这些任务信息。毕竟互斥锁的效率比较低,尤其是有N个线程只读,1个线程只写的情况下。

请问各位大神,这样的实现机制有没有问题,还有没有更优的实现机制?
...全文
137 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruiruining2010 2014-12-19
  • 打赏
  • 举报
回复
引用 2 楼 micropentium6 的回复:
first of all, you really didn't credit a whole lot of points here! :) second, based upon your description, you have had the solution already. I don't have any comment. In terms of your logic design, I am not sure why you have to allow client changing the request even after it has been pushed onto queue. Would it be better that client should cancel the former request and submit a new one instead?
因为需要维护每个任务的当前状态和任务的历史结果……如果直接删除之前的任务对象,任务状态和结果信息也木有了……
ruiruining2010 2014-12-19
  • 打赏
  • 举报
回复
引用 3 楼 zhxianbin 的回复:
太复杂!!!!!!!!!!!没看懂
其实就是两个问题: 1、对于N个需要执行的对象,使用线程池的方式是否合理?程序的原始设计是使用N个线程。 2、某个共享对象由1个线程写、N个线程读,使用读写锁是否合理,有没有更优的解决方案呢?
zhi_oo 2014-12-19
  • 打赏
  • 举报
回复
线程的任务应该这样没差。 1、任务信息的更改频繁不频繁?不频繁读写锁应该ok。 2、如果频繁,任务信息修改是否要求立即生效?不立即生效可以选择一个合适的时机让其生效。
zhxianbin 2014-12-18
  • 打赏
  • 举报
回复
太复杂!!!!!!!!!!!没看懂
  • 打赏
  • 举报
回复
first of all, you really didn't credit a whole lot of points here! :) second, based upon your description, you have had the solution already. I don't have any comment. In terms of your logic design, I am not sure why you have to allow client changing the request even after it has been pushed onto queue. Would it be better that client should cancel the former request and submit a new one instead?
ruiruining2010 2014-12-18
  • 打赏
  • 举报
回复
这个………都没人理啊……是问题太简单了还是分太少了哦……

23,127

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧