Annotation of parser3/src/main/pa_threads.C, revision 1.4
1.4 ! moko 1: /** @file
! 2: Parser: simple Mutex realization class.
! 3:
! 4: Copyright (c) 2001-2017 Art. Lebedev Studio (http://www.artlebedev.com)
! 5: Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
1.1 paf 6: */
7:
1.4 ! moko 8: #include <pthread.h>
1.1 paf 9: #include "pa_threads.h"
10:
1.4 ! moko 11: volatile const char * IDENT_PA_THREADS_C="$Id: pa_threads.C,v 1.20 2020/12/10 23:07:04 moko Exp $" IDENT_PA_THREADS_H;
1.1 paf 12:
1.2 paf 13: Mutex global_mutex;
14:
1.4 ! moko 15: #ifdef WIN32
1.1 paf 16:
1.4 ! moko 17: #include <windows.h>
1.1 paf 18:
1.4 ! moko 19: uint pa_get_thread_id() {
! 20: return GetCurrentThreadId();
! 21: }
1.1 paf 22:
1.4 ! moko 23: Mutex::Mutex() :
! 24: handle(reinterpret_cast<uint>(CreateMutex(NULL, FALSE, 0))) {
1.1 paf 25: }
26:
27: Mutex::~Mutex() {
1.4 ! moko 28: CloseHandle(reinterpret_cast<HANDLE>(handle));
1.1 paf 29: }
30:
1.2 paf 31: void Mutex::acquire() {
1.4 ! moko 32: WaitForSingleObject(reinterpret_cast<HANDLE>(handle), INFINITE);
1.1 paf 33: }
34:
1.2 paf 35: void Mutex::release() {
1.4 ! moko 36: ReleaseMutex(reinterpret_cast<HANDLE>(handle));
1.1 paf 37: }
38:
1.4 ! moko 39: #else
! 40:
! 41: #include <sys/syscall.h>
! 42: uint pa_get_thread_id() {
! 43: return syscall(__NR_gettid);
! 44: }
1.1 paf 45:
46: Mutex::Mutex() {
1.4 ! moko 47: pthread_mutex_init(&handle, NULL);
1.1 paf 48: }
49:
50: Mutex::~Mutex() {
1.4 ! moko 51: pthread_mutex_destroy(&handle);
1.1 paf 52: }
53:
1.2 paf 54: void Mutex::acquire() {
1.4 ! moko 55: pthread_mutex_lock(&handle);
1.1 paf 56: }
57:
1.2 paf 58: void Mutex::release() {
1.4 ! moko 59: pthread_mutex_unlock(&handle);
1.1 paf 60: }
61:
62: #endif
E-mail: