zoukankan      html  css  js  c++  java
  • 临界区访问的两个类:临界区类,共享临界区类

    CSharedCriticalSection 实现临界区的访问:加锁、去锁
    CSharedMutex 实现临时窃取临界区对象,然后加锁,对象销毁时又会去锁,然后归还对象

    class CSharedCriticalSection {
    public:
        CSharedCriticalSection() {
            InitializeCriticalSection(&critical_section_);
        }
    
        ~CSharedCriticalSection() {
            DeleteCriticalSection(&critical_section_);
        }
    
        void lock() {
            EnterCriticalSection(&critical_section_);
        }
    
        void unlock() {
            LeaveCriticalSection(&critical_section_);
        }
    
    private:
        CRITICAL_SECTION critical_section_;
    };
    
    
    class CSharedMutex {
    public:
        explicit CSharedMutex(CSharedCriticalSection& critical_section)
        : is_lock_(false)
        , critical_section_(critical_section)
        {
            if(is_lock_ == false) {
                is_lock_ = true;
                critical_section_.lock();
            }
        }
    
        ~CSharedMutex(){
            if(is_lock_) {
                is_lock_ = false;
                critical_section_.unlock();
            }
        }
    
        void lock() {
            if(is_lock_ == false) {
                is_lock_ = true;
                critical_section_.lock();
            }
        }
    
        void unlock() {
            if(is_lock_) {
                is_lock_ = false;
                critical_section_.unlock();
            }
        }
    
    protected:
        CSharedMutex(const CSharedMutex& rhs)
            : critical_section_(rhs.critical_section_)
        {
    
        }
    
        CSharedMutex& operator=(const CSharedMutex& rhs) {
            return *this;
        }
    
    private:
        volatile bool is_lock_;
        CSharedCriticalSection& critical_section_;
    };
  • 相关阅读:
    设计模式之Singleton(单态)(转)
    shell编程与循环
    连接查询、视图、事务、索引、外键
    mariadb主从架构
    Lvs虚拟服务器
    python字符串详解
    firewalld防火墙详解
    自动化运维ansible用法
    元组、列表、字典、集合
    内置函数for、while循环控制
  • 原文地址:https://www.cnblogs.com/eaglexmw/p/11242844.html
Copyright © 2011-2022 走看看