/trunk/Examples/test-suite/swig_examples_lock.h
C++ Header | 70 lines | 55 code | 14 blank | 1 comment | 2 complexity | 81c54ce8755f1fcecd301b3408ed8e16 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
- # 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