单读者单写者的无锁队列

一个读线程,一个写线程,共同操作一个队列,不用锁如何避免冲突?
 
通常用锁是因为读写线程共同操作一个count计数器,改成两个线程各操作一个计数器,每次读写之前比较两个计数器的大小。
 
初始:
head=-1;
rear=0;
a=0;
b=0;
 
读线程:
while(a>=b);//轮询
head=(head+1)%max;
val=data[head];
a++;
return val;
 
写线程:
while(b>=a+max);//轮询
data[rear]=val;
rear=(rear+1)%max;
b++;
posted @ 2013-03-21 15:45  使命召唤  阅读(479)  评论(0编辑  收藏  举报