设计实现ringbuffer无锁队列(lock free queue)

前两天跟同事交流了 无锁队列的问题,发现不少人对这个lock free的概念有些匮乏,这里就简单写个ringbuffer实现lock free的设计理念。  这里拿python举例子,ringbuffer其实就是个数组,单纯的数组结构肯定不能实现线程安全问题。

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新.  

需要几个变量:

生产者 index

消费者 index

数组大小

最重要的一个环节:

原子计数, python下是没有原子计数的,我们可以借助gcc的sync_fetch_and_add来实现原子计数。 可以参考这个项目    http://xiaorui.cc/?p=4613

伪代码:

(参照了一些github的ringbuffer实现,大同小异…)

# xiaorui.cc

product_ptr = 0
consumer_ptr = 0
queue_count = 10000

ringbuffer = (None for i in range(queue_count))


def product():
    while 1:
        if 生index - 消index > 500:
            sleep(xx)
            continue
        else:
            product_ptr ++
            ringbuffer[product_ptr] = "data"


def consumer():
    while 1:
        if 消 <= 生:
            ptr = consumer_ptr ++
            while 1:
                d = ringbuffer[ptr]
                if d is None:
                    continue

END…


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc