Go to the documentation of this file.00001
00008
00009
00010
00011
00012 #include <ecl/config/ecl.hpp>
00013 #if defined(ECL_IS_WIN32)
00014
00015
00016
00017
00018
00019 #include <ecl/exceptions/standard_exception.hpp>
00020 #include "../../include/ecl/threads/mutex_w32.hpp"
00021
00022
00023
00024
00025
00026 namespace ecl {
00027
00028
00029
00030
00031
00032 Mutex::Mutex(const bool locked) : number_locks(0) {
00033 InitializeCriticalSection(&mutex);
00034 if ( locked ) {
00035 this->lock();
00036 }
00037 }
00038
00039 Mutex::~Mutex() {
00040 DeleteCriticalSection(&mutex);
00041 }
00042
00043 void Mutex::lock() {
00044 InterlockedIncrement((long*)&number_locks);
00045 EnterCriticalSection(&mutex);
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 }
00066
00067 #endif