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: