zoukankan      html  css  js  c++  java
  • C++11 —— 简易的旋转锁类

    简易的旋转锁

    使用 C++11 的原子操作,实现的简易旋转锁(xspinlock.h):

    /**
     * @file    xspinlock.h
     * <pre>
     * Copyright (c) 2019, Gaaagaa All rights reserved.
     * 
     * 文件名称:xspinlock.h
     * 创建日期:2019年01月22日
     * 文件标识:
     * 文件摘要:简易的旋转锁类。
     * 
     * 当前版本:1.0.0.0
     * 作    者:
     * 完成日期:2019年01月22日
     * 版本摘要:
     * 
     * 历史版本:
     * 原作者  :
     * 完成日期:
     * 版本摘要:
     * </pre>
     */
    
    #ifndef __XSPINLOCK_H__
    #define __XSPINLOCK_H__
    
    #include <atomic>
    #include <thread>
    
    ////////////////////////////////////////////////////////////////////////////////
    // x_spinlock_t
    
    /**
     * @class x_spinlock_t
     * @brief 简易的旋转锁类。
     */
    class x_spinlock_t
    {
        // constructor/destructor
    public:
        x_spinlock_t(void)  { }
        ~x_spinlock_t(void) { }
    
        // public interfaces
    public:
        /**********************************************************/
        /**
         * @brief 加锁操作接口。
         */
        void lock(void)
        {
            while (m_xspin_flag.test_and_set(std::memory_order_acquire))
                std::this_thread::yield();
        }
    
        /**********************************************************/
        /**
         * @brief 解锁操作接口。
         */
        void unlock(void)
        {
            m_xspin_flag.clear(std::memory_order_release);
        }
    
        // data members
    private:
        std::atomic_flag   m_xspin_flag = ATOMIC_FLAG_INIT;   ///< 旋转标志
    };
    
    ////////////////////////////////////////////////////////////////////////////////
    
    #endif // __XSPINLOCK_H__
    
    
  • 相关阅读:
    不容易发现的错误
    Element-UI 笔记
    工作中常用的操作/经验
    记录一些前端强大的插件
    HttpContext.Current.ApplicationInstance.Application vs HttpContext.Current.Application
    What Is a Replay Attack?
    ASP.NET's Data Storage Objects
    JSON Web Token (JWT) RFC7519
    Session-State Modes
    After change SessionID data in Session variables is lost
  • 原文地址:https://www.cnblogs.com/VxGaaagaa/p/10320072.html
Copyright © 2011-2022 走看看