summaryrefslogtreecommitdiff
path: root/Examples/test-suite/swig_examples_lock.h
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/swig_examples_lock.h')
-rw-r--r--Examples/test-suite/swig_examples_lock.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/Examples/test-suite/swig_examples_lock.h b/Examples/test-suite/swig_examples_lock.h
new file mode 100644
index 0000000..feef26d
--- /dev/null
+++ b/Examples/test-suite/swig_examples_lock.h
@@ -0,0 +1,70 @@
+
+# if defined(_WIN32) || defined(__WIN32__)
+
+#include <windows.h>
+
+namespace SwigExamples {
+
+class CriticalSection {
+public:
+ CriticalSection() {
+ InitializeCriticalSection(&mutex_);
+ }
+ ~CriticalSection() {
+ DeleteCriticalSection(&mutex_);
+ }
+ CRITICAL_SECTION mutex_;
+};
+
+struct Lock {
+ Lock(CriticalSection &cs) : critical_section(cs) {
+ EnterCriticalSection(&critical_section.mutex_);
+ }
+ ~Lock() {
+ LeaveCriticalSection(&critical_section.mutex_);
+ }
+private:
+ CriticalSection &critical_section;
+};
+
+}
+
+#else
+
+#include <pthread.h>
+#ifndef PTHREAD_MUTEX_RECURSIVE_NP
+ // For Cygwin and possibly other OSs: _NP is "non-portable"
+ #define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
+#endif
+
+namespace SwigExamples {
+
+class CriticalSection {
+public:
+ CriticalSection() {
+ pthread_mutexattr_t mutexattr;
+ pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE_NP);
+ pthread_mutex_init(&mutex_, &mutexattr);
+ pthread_mutexattr_destroy(&mutexattr);
+ }
+ ~CriticalSection() {
+ pthread_mutex_destroy (&mutex_);
+ }
+ pthread_mutex_t mutex_;
+};
+
+struct Lock {
+ Lock(CriticalSection &cs) : critical_section(cs) {
+ pthread_mutex_lock (&critical_section.mutex_);
+ }
+ ~Lock() {
+ pthread_mutex_unlock (&critical_section.mutex_);
+ }
+private:
+ CriticalSection &critical_section;
+};
+
+}
+
+#endif
+