Annotation of parser3/src/main/pa_threads.C, revision 1.9

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

E-mail: