Eneboo - Documentación para desarrolladores
src/hoard/src/heaplayers/util/winlock.h
Ir a la documentación de este archivo.
00001 /* -*- C++ -*- */
00002 
00003 #ifndef _WINLOCK_H_
00004 #define _WINLOCK_H_
00005 
00006 #if defined(_WIN32)
00007 
00008 #include <windows.h>
00009 
00018 #if 1
00019 
00020 namespace HL {
00021 
00022 class WinLockType {
00023 public:
00024 
00025   WinLockType (void)
00026     : mutex (0)
00027   {}
00028 
00029   ~WinLockType (void)
00030   {
00031     mutex = 0;
00032   }
00033 
00034   inline void lock (void) {
00035 #if 1
00036     // We're on a multiprocessor - use atomic operations.
00037     while (InterlockedExchange ((long *) &mutex, 1) != 0) 
00038       Sleep (0);
00039 #endif
00040   }
00041 
00042   inline void unlock (void) {
00043     mutex = 0;
00044     // InterlockedExchange (&mutex, 0);
00045   }
00046 
00047 private:
00048   unsigned int mutex;
00049   bool onMultiprocessor (void) {
00050     SYSTEM_INFO infoReturn[1];
00051     GetSystemInfo (infoReturn);
00052     if (infoReturn->dwNumberOfProcessors == 1) {
00053       return FALSE;
00054     } else {
00055       return TRUE;
00056     }
00057   }
00058 };
00059 
00060 };
00061 
00062 #else
00063 
00064 #include <windows.h>
00065 
00066 class WinLockType {
00067 public:
00068 
00069   WinLockType (void)
00070   {
00071     InitializeCriticalSection(&mutex);
00072   }
00073 
00074   ~WinLockType (void)
00075   {
00076     DeleteCriticalSection(&mutex);
00077   }
00078 
00079   inline void lock (void) {
00080     EnterCriticalSection(&mutex);
00081   }
00082 
00083   inline void unlock (void) {
00084     LeaveCriticalSection(&mutex);
00085   }
00086 
00087 private:
00088   CRITICAL_SECTION mutex;
00089 };
00090 
00091 #endif
00092 
00093 #endif
00094 
00095 #endif
 Todo Clases Namespaces Archivos Funciones Variables 'typedefs' Enumeraciones Valores de enumeraciones Propiedades Amigas 'defines'