单读者单写者的无锁队列
一个读线程,一个写线程,共同操作一个队列,不用锁如何避免冲突?
通常用锁是因为读写线程共同操作一个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++;