zoukankan      html  css  js  c++  java
  • C++之对同步对象进行封装包装

      包装器外观模式:把现有的非面向对象/面向对象API提供的函数和数据(例如底层操作系统API、基础类)封装在更加简洁使用的、健壮的、可维护的和聚合的面向对象的类接口之内,如线程同步对象的包装;

    #ifdef LINUX_PTHREADS
    #include <pthread.h>
    #include <semaphore.h>
    #define MUTEX_PTR_DECLARE pthread_mutex_t*
    #define MUTEX_LOCK(mutex) pthread_mutex_lock(mutex)
    #define MUTEX_UNLOCK(mutex) pthread_mutex_unlock(mutex)
    #elif defined(WIN32_THREADS)
    #include <windows.h>
    #define MUTEX_PTR_DECLARE CRITICAL_SECTION*
    #define MUTEX_LOCK(mutex)  EnterCriticalSection(mutex)
    #define MUTEX_UNLOCK(mutex)  LeaveCriticalSection(mutex)
    #endif
    class Guard
    {
    public:
        Guard(MUTEX_PTR_DECLARE mutex): _mutex (mutex)
        {
            MUTEX_LOCK( _mutex );
        }
        ~Guard()
        {
            MUTEX_UNLOCK( _mutex );
        }
    private:
        MUTEX_PTR_DECLARE _mutex;
        // disable copy
        Guard(const Guard&);
        Guard& operator=(const Guard&);
    }

      因此经过上述封装包装后,在函数内使用同步机制时,不管函数的返回路径有多少条,都不需要在每条返回路径上去释放同步对象了,只要在需要使用同步机制的地方构造Guard对象即可,因为Guard对象在析构时自动回释放同步对象。这样就大大减少了出错的机会了。

  • 相关阅读:
    如何DIY陶瓷制作方法
    陶瓷的分类
    陶瓷
    机器视觉之——认知篇
    Halcon学习笔记(一)
    编程过程遇到的问题及解决方法
    前端技术——WebFont与Sprite
    HTML学习总结(四)【canvas绘图、WebGL、SVG】
    CSS3学习之——【特殊属性】
    HTML5学习总结——本地存储
  • 原文地址:https://www.cnblogs.com/appsucc/p/2760396.html
Copyright © 2011-2022 走看看