boost lockfree queue-boost无锁队列

例子如下:

#include <iostream>
#include <boost/lockfree/queue.hpp>

int main()
{

	boost::lockfree::queue<int, boost::lockfree::fixed_sized<false> > queue(128);

	for (int i = 0;i < 10000;i++)
		queue.push(i);

	while (!queue.empty())
	{
		int data = 0;
		queue.pop(data);
		std::cout << data << std::endl;
	}


	getchar();
	return 0;
}

LockFree的基础知识涉及:Atomic(原子操作),CAS(Compay and swap),内存预分配;

Atomic原子操作是无锁的核心实现,原子操作的实质是通过使用CPU的一些特殊指令(通常为汇编代码指令)或操作系统封装的一些内存锁定接口(系统封装的内存保护接口)来对指定长度的内存进行访问和修改,因为访问内存的原子性从而实现上层接口的无锁操作;
CAS,核心代码如下:

int  compare_and_swap ( int * reg,  int  oldval, int  newval)
{
   ATOMIC();
   int  old_reg_val = *reg;
   if  (old_reg_val == oldval) 
      *reg = newval;
   END_ATOMIC();
   return  old_reg_val;
}

实质是通过不断比较预期值和当前值之间的数值从而决定是否需要交换保护内存中的内容。

lock-free和wait-free的区别:
阻塞算法可能会出现整个系统都挂起的情况(占有锁的线程被中断,无法释放所,那么所有试图争用这个锁的线程会被挂起),系统中的所有线程全部饿死。
无锁算法可以保证系统中至少有一个线程处于工作状态,但是还是可能有线程永远抢不到资源而被饿死。
无等待算法保证系统中的所有线程都能处于工作状态,没有线程会被饿死,只要时间够,所有线程都能结束。相比于无锁算法,无等待算法有更强的保证。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值