#ifndef MSP_FRAMEWORK_MUTEX_H_
#define MSP_FRAMEWORK_MUTEX_H_
-#include <pthread.h>
#include <msp/refcount.h>
+#include "types.h"
namespace Msp {
class Mutex
{
public:
+#ifndef WIN32
Mutex() { pthread_mutex_init(&mutex, 0); }
int lock() { return pthread_mutex_lock(&mutex); }
int trylock() { return pthread_mutex_trylock(&mutex); }
int unlock() { return pthread_mutex_unlock(&mutex); }
~Mutex() { pthread_mutex_destroy(&mutex); }
+#else
+ Mutex() { mutex=CreateMutex(0, false, 0); }
+ int lock() { return WaitForSingleObject(mutex, INFINITE)==WAIT_OBJECT_0; }
+ int trylock() { return WaitForSingleObject(mutex, 0)==WAIT_OBJECT_0; }
+ int unlock() { return !ReleaseMutex(mutex); }
+ ~Mutex() { CloseHandle(mutex); }
+#endif
private:
- pthread_mutex_t mutex;
+ MutexHandle mutex;
friend class Semaphore;
};