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__
    
    
  • 相关阅读:
    while,do while和for循环语句的用法
    阶乘
    java--测体重练习
    java---相亲练习
    java ---运算符
    java数据类型定义与输出
    基本Java数据类型
    揭开UTF-8的神秘面纱
    POJ 1164 城堡问题【DFS/位运算/种子填充法/染色法】
    POJ 3984 迷宫问题【BFS/路径记录/手写队列】
  • 原文地址:https://www.cnblogs.com/VxGaaagaa/p/10320072.html
Copyright © 2011-2022 走看看