From 4fd3866e25f4e3cdb674b6351a58222587d6fdc3 Mon Sep 17 00:00:00 2001 From: Jeff Hill Date: Fri, 19 Apr 2002 17:57:15 +0000 Subject: [PATCH] installed --- .../cxxTemplates/epicsSingletonMutex.cpp | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/libCom/cxxTemplates/epicsSingletonMutex.cpp diff --git a/src/libCom/cxxTemplates/epicsSingletonMutex.cpp b/src/libCom/cxxTemplates/epicsSingletonMutex.cpp new file mode 100644 index 000000000..51bbdb5a9 --- /dev/null +++ b/src/libCom/cxxTemplates/epicsSingletonMutex.cpp @@ -0,0 +1,49 @@ + +/* + * $Id$ + * + * Author: Jeff O. Hill + * + */ + +#define epicsExportSharedSymbols +#include "epicsSingleton.h" + +class epicsShareClass epicsSingletonMutex { +public: + epicsSingletonMutex (); + ~epicsSingletonMutex (); + epicsMutex & get (); +private: + epicsThreadOnceId onceFlag; + epicsMutex * pMutex; + static void once ( void * ); +}; + +epicsSingletonMutex::epicsSingletonMutex () : + onceFlag ( EPICS_THREAD_ONCE_INIT ), pMutex ( 0 ) +{ +} + +epicsSingletonMutex::~epicsSingletonMutex () +{ + delete this->pMutex; +} + +void epicsSingletonMutex::once ( void * pParm ) +{ + epicsSingletonMutex *pSM = static_cast < epicsSingletonMutex * > ( pParm ); + pSM->pMutex = new epicsMutex; +} + +epicsMutex & epicsSingletonMutex::get () +{ + epicsThreadOnce ( & this->onceFlag, epicsSingletonMutex::once, this ); + return * this->pMutex; +} + +epicsMutex & epicsSingletonPrivateMutex () +{ + static epicsSingletonMutex mutex; + return mutex.get (); +}