• 锁的实现


    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.....

    }

  • 相关阅读:
    2020软件工程作业01
    2020软件工程—06—个人作业
    团队二次作业
    软件工程作业05
    软件工程作业00--问题清单
    软件工程作业04二期
    2020软件工程作业04
    oracle11安装过程中常出现的问题和解决办法
    2020软件工程作业03
    2020软件工程作业02
  • 原文地址:https://www.cnblogs.com/cnhk19/p/13162623.html
Copyright © 2020-2023  润新知