mutex_w32.cpp
Go to the documentation of this file.
00001 
00008 /*****************************************************************************
00009 ** Platform Check
00010 *****************************************************************************/
00011 
00012 #include <ecl/config/ecl.hpp>
00013 #if defined(ECL_IS_WIN32)
00014 
00015 /*****************************************************************************
00016 ** Includes
00017 *****************************************************************************/
00018 
00019 #include <ecl/exceptions/standard_exception.hpp>
00020 #include "../../include/ecl/threads/mutex_w32.hpp"
00021 
00022 /*****************************************************************************
00023 ** Namespaces
00024 *****************************************************************************/
00025 
00026 namespace ecl {
00027 
00028 /*****************************************************************************
00029 * Mutex Class Methods
00030 *****************************************************************************/
00031 
00032 Mutex::Mutex(const bool locked) : number_locks(0)  {
00033         InitializeCriticalSection(&mutex); // has no return value
00034         if ( locked ) {
00035                 this->lock();
00036         }
00037 }
00038 
00039 Mutex::~Mutex() {
00040         DeleteCriticalSection(&mutex); // has no return value
00041 }
00042 
00043 void Mutex::lock() {
00044         InterlockedIncrement((long*)&number_locks);
00045     EnterCriticalSection(&mutex); // has no return value
00046 }
00047 
00048 bool Mutex::trylock(Duration &duration) {
00049         return trylock();
00050 }
00051 
00052 bool Mutex::trylock() {
00053         if (number_locks > 0)
00054                 return false;
00055         lock();
00056         return true;
00057 }
00058 
00059 void Mutex::unlock()
00060 {
00061     LeaveCriticalSection( &mutex );
00062     InterlockedDecrement((long*)&number_locks);
00063 }
00064 
00065 } // namespace ecl
00066 
00067 #endif /* ECL_IS_WIN32 */


ecl_threads
Author(s): Daniel Stonier
autogenerated on Sun Oct 5 2014 23:35:37