• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            簡(jiǎn)單的多線程同步的小工具類

            一些適用于Windows下的多線程同步的小工具類。

            快速互斥鎖,封裝了臨界區(qū)的Windows API:
            class FastMutex
            {
            private:
                CRITICAL_SECTION    m_Cs;

            public:
                FastMutex() 
            { ::InitializeCriticalSection(&this->m_Cs); }
                
            ~FastMutex() { ::DeleteCriticalSection(&this->m_Cs); }
                
            void    Lock()        { ::EnterCriticalSection(&this->m_Cs); }
                
            bool    TryLock()    return ::TryEnterCriticalSection(&this->m_Cs) ? true : false; }
                
            void    Unlock()    { ::LeaveCriticalSection(&this->m_Cs); }
            }
            ;

            簡(jiǎn)單封裝了Windows的信號(hào)量(Semaphore)的API。
            class FastSemaphore
            {
            private:
                HANDLE    m_hSemaphore;
                
            long m_lMaximumCount;

            public:
                FastSemaphore(
            long lMaximumCount)
                
            {
                    
            this->m_hSemaphore = ::CreateSemaphore(NULL, lMaximumCount, lMaximumCount, NULL);

                    
            if (this->m_hSemaphore == NULL) throw "Call to CreateSemaphore() failed. Could not create semaphore.";
                    
            this->m_lMaximumCount = lMaximumCount;
                }
            ;

                
            ~FastSemaphore() { ::CloseHandle(this->m_hSemaphore); };

                
            long GetMaximumCount() const return this->m_lMaximumCount; };
                
            void Inc() { ::WaitForSingleObject(this->m_hSemaphore, INFINITE); };
                
            void Dec() { ::ReleaseSemaphore(this->m_hSemaphore, 1, NULL); };
                
            void Dec(long lCount) { ::ReleaseSemaphore(this->m_hSemaphore, lCount, NULL); };
            }
            ;

            讀寫互斥鎖,多線程可以同時(shí)讀取同一個(gè)文件,但是卻不能同時(shí)寫入同一個(gè)文件,對(duì)某一個(gè)文件的寫操作必須是某一個(gè)線程所獨(dú)占的。
            class ReadWriteMutex
            {
            private:
                FastMutex        m_qMutex;
                FastSemaphore    m_qSemaphore;

            public:
                ReadWriteMutex(
            long lMaximumReaders): m_qSemaphore(lMaximumReaders) {};

                
            void    lockRead() { m_qSemaphore.Inc(); };
                
            void    unlockRead() { m_qSemaphore.Dec(); };

                
            void lockWrite()
                
            {
                    m_qMutex.Lock();
                    
            for (int i = 0; i < maxReaders(); ++i) m_qSemaphore.Inc();
                    m_qMutex.Unlock();
                }
            ;

                
            void    unlockWrite() {  m_qSemaphore.Dec(m_qSemaphore.GetMaximumCount()); };
                
            int        maxReaders() const return m_qSemaphore.GetMaximumCount(); };
            }
            ;


            區(qū)域鎖
            template <class M>
            class ScopedLock
            {
            public:
                inline ScopedLock(M
            & mutex): _mutex(mutex)
                
            {
                    _mutex.Lock();
                }

                inline 
            ~ScopedLock()
                
            {
                    _mutex.Unlock();
                }


            private:
                M
            & _mutex;

                ScopedLock();
                ScopedLock(
            const ScopedLock&);
                ScopedLock
            & operator = (const ScopedLock&);
            }
            ;
            曉得區(qū)域鎖咋用吧?
            void xxxFuc()
            {
            ScopeLock
            <FastMutex> mutex;

            }

            區(qū)域解鎖
            template <class M>
            class ScopedUnlock
            {
            public:
                inline ScopedUnlock(M
            & mutex, bool unlockNow = true): _mutex(mutex)
                
            {
                    
            if (unlockNow)
                        _mutex.Unlock();
                }

                inline 
            ~ScopedUnlock()
                
            {
                    _mutex.Lock();
                }


            private:
                M
            & _mutex;

                ScopedUnlock();
                ScopedUnlock(
            const ScopedUnlock&);
                ScopedUnlock
            & operator = (const ScopedUnlock&);
            }
            ;
            與上面的區(qū)域鎖的操作相反。

            NOTE:他們只是簡(jiǎn)單的小工具類,他們只是保證了“能用”,當(dāng)中可能有很多不足,或者不適用特別的情況。

            posted on 2008-05-04 10:43 楊粼波 閱讀(443) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            国产精品一久久香蕉国产线看观看 | jizzjizz国产精品久久| 久久精品中文无码资源站 | 久久AV高清无码| 欧美久久综合性欧美| 久久久久香蕉视频| 亚洲va中文字幕无码久久不卡| 久久99精品久久久久久久久久| 亚洲综合久久综合激情久久| 久久免费观看视频| 久久精品国产久精国产思思| 精品一久久香蕉国产线看播放| 日本精品久久久久久久久免费| 一本色道久久HEZYO无码| 久久久精品一区二区三区| 亚洲精品无码久久久| 九九精品99久久久香蕉| 久久久久免费视频| 久久99精品国产麻豆| 要久久爱在线免费观看| 99久久久国产精品免费无卡顿| 久久精品亚洲福利| 久久99精品国产自在现线小黄鸭| 久久久国产精华液| 99久久精品国产麻豆| 久久只有这里有精品4| 国产99久久九九精品无码| 99久久国产综合精品女同图片| 国产激情久久久久影院老熟女免费 | 久久777国产线看观看精品| 久久亚洲AV无码精品色午夜麻豆 | 99久久精品免费看国产一区二区三区| 九九99精品久久久久久| 欧洲人妻丰满av无码久久不卡 | 国产亚洲婷婷香蕉久久精品| 久久精品人人做人人爽电影| 久久99精品久久久久久齐齐| 精品久久久久久久| 九九久久自然熟的香蕉图片| 一本久道久久综合狠狠爱| 一本色道久久88综合日韩精品 |