Annotation of parser3/src/main/pa_threads.C, revision 1.5
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:
8: #include "pa_threads.h"
9:
1.5 ! moko 10: volatile const char * IDENT_PA_THREADS_C="$Id: pa_threads.C,v 1.4 2020/12/11 14:59:36 moko Exp $" IDENT_PA_THREADS_H;
1.1 paf 11:
1.2 paf 12: Mutex global_mutex;
13:
1.4 moko 14: #ifdef WIN32
1.1 paf 15:
1.4 moko 16: #include <windows.h>
1.1 paf 17:
1.4 moko 18: uint pa_get_thread_id() {
19: return GetCurrentThreadId();
20: }
1.1 paf 21:
1.4 moko 22: Mutex::Mutex() :
23: handle(reinterpret_cast<uint>(CreateMutex(NULL, FALSE, 0))) {
1.1 paf 24: }
25:
26: Mutex::~Mutex() {
1.4 moko 27: CloseHandle(reinterpret_cast<HANDLE>(handle));
1.1 paf 28: }
29:
1.2 paf 30: void Mutex::acquire() {
1.4 moko 31: WaitForSingleObject(reinterpret_cast<HANDLE>(handle), INFINITE);
1.1 paf 32: }
33:
1.2 paf 34: void Mutex::release() {
1.4 moko 35: ReleaseMutex(reinterpret_cast<HANDLE>(handle));
1.1 paf 36: }
37:
1.4 moko 38: #else
39:
1.5 ! moko 40: #include <pthread.h>
! 41: #ifdef HAVE_GETTID
1.4 moko 42: #include <sys/syscall.h>
1.5 ! moko 43: #endif
! 44:
1.4 moko 45: uint pa_get_thread_id() {
1.5 ! moko 46: #ifdef HAVE_GETTID
1.4 moko 47: return syscall(__NR_gettid);
1.5 ! moko 48: #else
! 49: return 1;
! 50: #endif
1.4 moko 51: }
1.1 paf 52:
53: Mutex::Mutex() {
1.4 moko 54: pthread_mutex_init(&handle, NULL);
1.1 paf 55: }
56:
57: Mutex::~Mutex() {
1.4 moko 58: pthread_mutex_destroy(&handle);
1.1 paf 59: }
60:
1.2 paf 61: void Mutex::acquire() {
1.4 moko 62: pthread_mutex_lock(&handle);
1.1 paf 63: }
64:
1.2 paf 65: void Mutex::release() {
1.4 moko 66: pthread_mutex_unlock(&handle);
1.1 paf 67: }
68:
69: #endif
E-mail: