无锁队列

循环队列能够满足多线程下的无锁要求,但问题是使用数组实现的循环队列长度是固定的,需要处理队列满时的情况,这时可以暂停写操作,另外扩容也是一个选择,只是比较麻烦。

最近想了无锁链表的可能性,感觉还是可行吧。

链表节点:

struct node{

  node* next;

  void* value;

}

初始化先压入一个空节点,并设为赋值给读写节点。

读者判定读节点是否为空节点来判定队列是否为空,不为空时读取值,读节点前移。

写者每压数据时先压空节点,再将写节点的值赋值为数据值,最后改写节点为之前压入的空节点。

这种方式存在问题是每次都要压节点指针,这里如果new的话本身还是会有加锁机制吧。

没做测试...只提供一个思路。

posted on 2016-07-06 11:21  蒸湘云集  阅读(171)  评论(3)    收藏  举报