自动锁代码参考



/**
     * SyncObject - The class is a wrapper of Critical section object to provide
     *              synchronization for thread pool.
     */
    class SyncObject
    {

    public:
        // Constructor
        SyncObject()
        {
            ::InitializeCriticalSection( &m_stCriticalSection );
        }

        // Destructor
        ~SyncObject()
        {
            ::DeleteCriticalSection( &m_stCriticalSection );
        }

        // Lock critical section.
        bool Lock()
        {
            ::EnterCriticalSection( &m_stCriticalSection );
            return true;
        }

        // Unlock critical section.
        bool Unlock()
        {
            ::LeaveCriticalSection( &m_stCriticalSection );
            return true;
        }

   /* private:
        SyncObject( const SyncObject& );
        SyncObject& operator = ( const SyncObject& );*/

    private:

        // Critical section object.
        CRITICAL_SECTION m_stCriticalSection;
    };


 /**
     * AutoLock - This class own synchronization object during construction and
     *            release the ownership during the destruction.
     */
    class AutoLock
    {

    public:

        /**
         * Parameterized constructor
         *
         * @param       LockObj_i - Synchronization object.
         * @return      Nil
         * @exception   Nil
         * @see         Nil
         * @since       1.0
         */
  AutoLock( SyncObject& LockObj_i ) : m_pSyncObject(&LockObj_i)
        {
   
   
            if( NULL != m_pSyncObject )
            {
                m_pSyncObject->Lock();
            }
        }

        /**
         * Destructor.
         *
         * @param       Nil
         * @return      Nil
         * @exception   Nil
         * @see         Nil
         * @since       1.0
         */
        ~AutoLock()
        {
            if( NULL != m_pSyncObject )
            {
                m_pSyncObject->Unlock();
                m_pSyncObject = NULL;
            }
        }

    private:
        SyncObject* m_pSyncObject;  
    };


使用例子:

AbstractRequest* ThreadPool::PopRequest( REQUEST_QUEUE& RequestQueue_io )
    {
        AutoLock LockThread( m_LockWorkerThread );
       /* if( !RequestQueue_io.empty())
        {
            AbstractRequest* pRequest = RequestQueue_io.front();
            RequestQueue_io.remove( pRequest );
            return pRequest;
        }*/
        return 0;
    }


做为c++良好的例子,和学习c++编程思想简单例子

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis分布式可以通过设置一个过期时间来防止死的发生,同时还可以自动续期。在Redisson实现分布式代码中,可以看到设置了一个扫描间隔参数`setScanInterval`,这个参数表示每隔一定时间就会来确认一次是否释放。如果没有释放,那么就会自动续期,保证的有效性。 在具体的代码实现中,使用了Redisson的RLock对象来获取,并使用`lock.lock()`来加,`lock.unlock()`来释放。当执行`lock.lock()`时,会将的状态存储到Redis中,并设置一个过期时间。在的过期时间内,Redisson会定期发送续期请求来更新的过期时间,确保的持有者能够在业务处理完成前一直持有。一旦业务处理完成,调用`lock.unlock()`来释放时,Redisson会在Redis中删除对应的信息,从而释放。 关于Redis分布式的更多详细信息,你可以参考Redisson的官方文档,链接为:https://github.com/redisson/redisson/wiki/8.-distributed-locks-and-synchronizers。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Redis分布式如何自动续期](https://blog.csdn.net/upstream480/article/details/121578638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [06-Redis 实现分布式和解决续期问题](https://blog.csdn.net/jack1liu/article/details/96270927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatgptT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值