mutex.hh

来自「各种工程计算的库函数」· HH 代码 · 共 139 行

HH
139
字号
/*    Mutex class, header    Copyright (C) 1999-2005 Jussi Laako    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/#ifndef USE_NPTL#include <pthread.h>#else#include <nptl/pthread.h>#endif#ifndef MUTEX_HH    #define MUTEX_HH    /**        Class implementation of POSIX mutex semaphore    */    class clMutex    {            pthread_mutex_t pthmMutex;        public:            /**                Constructor; creates and initializes the mutex            */            clMutex () { pthread_mutex_init(&pthmMutex, NULL); }            /**                Desctructor; destroys the mutex            */            virtual ~clMutex () { pthread_mutex_destroy(&pthmMutex); }            /**                Lock mutex.                Process is blocked until mutex lock becomes available.                \return Success            */            bool Wait ()                {                     if (pthread_mutex_lock(&pthmMutex) != 0)                        return false;                    return true;                }            /**                Unlock mutex                \return Success            */            bool Release ()                {                     if (pthread_mutex_unlock(&pthmMutex) != 0)                        return false;                    return true;                }            /**                Try locking mutex without blocking the calling process.                \return Success            */            bool TryLock ()                {                    if (pthread_mutex_trylock(&pthmMutex) != 0)                        return false;                    return true;                }            /**                Return pointer to mutex variable. For use with condition                variables.                \return Pointer to pthread mutex variable            */            pthread_mutex_t *GetPtr () { return (&pthmMutex); }    };    /**        Exception safe mutex acquirer class.    */    class clSafeMutex    {            bool bAcquired;            clMutex *Mtx;        public:            clSafeMutex (clMutex &MtxP)                {                    bAcquired = false;                    Mtx = &MtxP;                }            virtual ~clSafeMutex ()                {                    if (bAcquired)                        Mtx->Release();                }            /**                Lock mutex.                Process is blocked until mutex lock becomes available.                \return Success            */            bool Wait ()                {                    if (!Mtx->Wait())                        return false;                    bAcquired = true;                    return true;                }            /**                Unlock mutex                \return Success            */            bool Release ()                {                    bAcquired = false;                    if (!Mtx->Release())                        return false;                    return true;                }    };#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?