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: