zoukankan      html  css  js  c++  java
  • 锁的实现

    class OSMutex
    {
    public:

        OSMutex();
        ~OSMutex();

        inline void Lock();
        inline void Unlock();

        // Returns true on successful grab of the lock, false on failure
        inline Bool16 TryLock();

    private:

    #ifdef __Win32__
        CRITICAL_SECTION fMutex;

        DWORD       fHolder;
        UInt32      fHolderCount;

    #elif !__PTHREADS_MUTEXES__
        mymutex_t fMutex;
    #else
        pthread_mutex_t fMutex;
        // These two platforms don't implement pthreads recursive mutexes, so
        // we have to do it manually
        pthread_t   fHolder;
        UInt32      fHolderCount;
    #endif

    #if __PTHREADS_MUTEXES__ || __Win32__       
        void        RecursiveLock();
        void        RecursiveUnlock();
        Bool16      RecursiveTryLock();
    #endif
        friend class OSCond;
    };

    class OSMutexLocker
    {
    public:

        OSMutexLocker(OSMutex* inMutexP) : fMutex(inMutexP) { if (fMutex != NULL) fMutex->Lock(); }
        ~OSMutexLocker() { if (fMutex != NULL) fMutex->Unlock(); }

        void Lock() { if (fMutex != NULL) fMutex->Lock(); }
        void Unlock() { if (fMutex != NULL) fMutex->Unlock(); }

    private:
        OSMutex*    fMutex;

    };

    OSMutexLocker 通过构造函数和析构函数完成对区块的上锁和解锁,当需要对部分进行锁定时:

    fun()

    {

          operation........

            {

                  OSMutexLocker  locker(...)

           }

         opearation.....

    }

  • 相关阅读:
    Dockerfile-ADD命令-转载
    华为云上上传镜像到在线镜像仓库
    什么是4D(DRG、DLG、DOM、DEM)数据
    视频对接资料
    OpenLayer改变切片地图的样式-滤镜效果
    Docker-挂载宿主机目录到容器
    RTSP在线视频环境搭建2-海康摄像头
    配置自己风格的Clang-Format-Xcode
    GCDAsyncUdpSocket的使用
    react-native component function
  • 原文地址:https://www.cnblogs.com/cnhk19/p/13162623.html
Copyright © 2011-2022 走看看