- 论坛徽章:
- 0
|
本帖最后由 xhl 于 2011-12-22 23:08 编辑
hy036630 发表于 2011-12-21 14:58 ![]()
不好意思 可能我上面没有说清楚
我用的是下面这个环形队列 无锁的实现一个进程读,一个进程写,没有牵涉 ...
先不说性能问题, 你用这样的环形队列实现lockfree肯定有问题, 因为你的push_count, push_index, pop_count, pop_index没有原子操作保护。
多个线程下, 可能会出现问题的。
而且按你的思路, 你的生产消费关系不应该是两边死循环的一个push, 一个get, 这个是非常不经济的。
你应该让让一边一直生产, 一边每间隔一段时间, 取出一批循环处理, 这样才能真正发挥多核心生产线的优势。 你的模型大部分时间多个线程之间都没在做有意义的事情, 都在轮训判断那个队列是否可取或者可以放。
所以我认为你的模型没必要用lockfreequeue, 直接用普通mutex就可以了, 最好做到批量生产, 批量消费, 不要上锁做业务, 把一批做完, 上锁挂一批指针, 取也是, 上锁取一批指针, 然后死循环做业务。
锁的机会很少, 保证多个线程几乎能同跑做业务。 |
|