• 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对象在析构时自动回释放同步对象。这样就大大减少了出错的机会了。

  • 相关阅读:
    任意进制间的转换
    判断线段相交 hdu 1086
    大数(高精度)加减乘除取模运算
    sqlserver2008透明书库加密
    数据库质疑
    sql2005 和sql2008 同时安装
    editrules
    sqlserver 表值函数
    sqlserver释放内存
    sql2008查看备份进度
  • 原文地址:https://www.cnblogs.com/appsucc/p/2760396.html
Copyright © 2020-2023  润新知