基于C++ STL利用CAS原子操作封装的无锁list

本文介绍了在高吞吐量项目中,为提高性能,使用CAS原子操作实现基于STL list的无锁list封装。通过实验对比,展示了无锁list在插入和取出1000000个元素时相比于使用mutex锁的性能优势。
摘要由CSDN通过智能技术生成

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值