网站因备案关闭,上海市单位名称地址大全,页面设计收获心得,免费发外链这个是一个用c 11标准实现的无锁非阻塞链表队列#xff0c;通过增加一个dummy节点#xff0c;解偶合链表头指针和尾指针。使得当只有一个生产者和一个消费者时#xff0c;进队和出队都无需加锁#xff0c;进队操作的是尾指针#xff0c;出队操作的是头指针#xff0c;互不…这个是一个用c 11标准实现的无锁非阻塞链表队列通过增加一个dummy节点解偶合链表头指针和尾指针。使得当只有一个生产者和一个消费者时进队和出队都无需加锁进队操作的是尾指针出队操作的是头指针互不干涉。对于多个生产者且单个消费者时只需要对尾指针加锁保护而头指针不需要加锁。反之对于单生产者且多消费者时只需要对头指针加锁保护而尾指针不需要加锁。如果是多生产者和多消费者那么头尾指针各自加锁保护。同时队列内部会对节点进行缓存避免重复的内存分配以提高性能。在双cpu的机器上测试性能比boost实现的单生产者和单消费者队列boost::lockfree::spsc_queue快6到7倍。//对模板使用别名方便使用(说明NullMutex是一个空锁是一个自旋锁spin_lock)//单生产者和单消费者template using spsc_queue TDoubleLockLinkedNonBlockingQueue;//多生产者和单消费者template using mpsc_queue TDoubleLockLinkedNonBlockingQueue;//单生产者和多消费者template using spmc_queue TDoubleLockLinkedNonBlockingQueue;//多生产者和多消费者template using mpmc_queue TDoubleLockLinkedNonBlockingQueue;//使用例子//定义一个单生产者和单消费者队列spsc_queue queue;//进队queue.push(1);//出队int value;if(queue.pop(value)){printf(value %d \n,value);}下文测试例子在E5-2620 v3 双cpu的机器上的运行结果单生产者[1]--单消费者[1]模型测试 数据请求[count100000000]NullMutex TDoubleLockLinkedNonBlockingQueue : 花时 3.010000 秒boost::lockfree::spsc_queue : 花时 19.312000 秒