基于C++ STL利用CAS原子操作封装的无锁list
来源:互联网 发布:python金融实战 编辑:程序博客网 时间:2024/05/20 05:57
在做高吞吐量的项目中,性能是必须考虑的一个重要因素。而数据同步则又是重中之重,常常需要使用到锁,但是锁的使用会造成性能下降。这个时候,CAS就大显身手了,关于CAS,这里就不再多说。直接贴我基于STL list的封装的无锁list,其他容器则类似。
文件1:lockfree_list.hpp
#ifndef JZ_LOCK_FREE_LIST_HPP#define JZ_LOCK_FREE_LIST_HPP#include <list>/** 说明:基于CAS封装的无锁List。*/template <typename T>class JzLockfreeList{ private: std::list<T> list; private: int mutex; int lock; int unlock; public: JzLockfreeList():mutex(0),lock(0),unlock(1){}; ~JzLockfreeList(){}; void Lock() { while( !__sync_bool_compare_and_swap (&mutex,lock, 1) ) { usleep(100); } } void Unlock() { __sync_bool_compare_and_swap (&mutex,unlock, 0) ; } void Push(T data) { Lock(); list.push_back(data); Unlock(); } T Front() { Lock(); T data = list.front(); Unlock(); return data; } void PopFront() { Lock(); list.pop_front(); Unlock(); } bool IsEmpty() { Lock(); if( list.empty() ) { Unlock(); return true; } else { Unlock(); return false; } } bool Find(T data) { typename std::list<T>::iterator it; Lock(); for ( it = list.begin(); it != list.end(); ++it) { if( *it == data ) { Unlock(); return true; } } Unlock(); return false; }};#endif
下面是我的测试结果:
插入和取出1000000个元素耗时(us):
CAS mutex
503691 1045527
498933 956898
484434 1023751
阅读全文
0 0
- 基于C++ STL利用CAS原子操作封装的无锁list
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS原子操作实现无锁及性能分析
- CAS无锁操作
- 利用CAS操作(Compare & Set)实现无锁队列
- 利用CAS操作(Compare & Set)实现无锁队列
- java原子操作的原理 cas
- 集群环境中利用Memcached CAS原子操作计数
- Think in Java 读书笔记(二)(浓缩出精华_(:з)∠)_)
- C 碎片六 函数
- C 碎片七 指针
- C 碎片八 结构体&枚举&联合
- C 碎片九 预处理&位运算&文件操作
- 基于C++ STL利用CAS原子操作封装的无锁list
- C 碎片十 关键字&库函数
- C 碎片十一 扫雷源码
- OC 中 self 与 super 总结
- 面试题 一
- ssh
- 面试题 集锦
- spring
- @property的4类修饰符