在做高吞吐量的项目中,性能是必须考虑的一个重要因素。而数据同步则又是重中之重,常常需要使用到锁,但是锁的使用会造成性能下降。这个时候,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) ;