--- parser3/src/include/pa_threads.h 2001/05/17 10:42:56 1.15 +++ parser3/src/include/pa_threads.h 2020/12/15 17:10:32 1.37 @@ -1,29 +1,37 @@ /** @file Parser: mutex & helpers decls. - Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - - Author: Alexander Petrosyan (http://design.ru/paf) - - $Id: pa_threads.h,v 1.15 2001/05/17 10:42:56 parser Exp $ + Copyright (c) 2001-2020 Art. Lebedev Studio (http://www.artlebedev.com) + Author: Alexandr Petrosian (http://paf.design.ru) */ #ifndef PA_THREADS_H #define PA_THREADS_H +#define IDENT_PA_THREADS_H "$Id: pa_threads.h,v 1.37 2020/12/15 17:10:32 moko Exp $" + #include "pa_config_includes.h" #include "pa_types.h" +#ifdef _MSC_VER +#include +#endif -#ifdef MULTITHREAD +/// get caller thread ID +uint pa_get_thread_id(); class AutoSYNCHRONIZED; /// simple semaphore object class Mutex { - friend AutoSYNCHRONIZED; -private: - uint handle; + friend class AutoSYNCHRONIZED; + +#ifdef _MSC_VER +HANDLE handle; +#else +pthread_mutex_t handle; +#endif + public: Mutex(); ~Mutex(); @@ -36,9 +44,9 @@ extern Mutex global_mutex; /** Helper to ensure paired Mutex::acquire() and Mutex::release(). - Use it with SYNCHRONIZED macro */ + class AutoSYNCHRONIZED { public: AutoSYNCHRONIZED() { global_mutex.acquire(); } @@ -56,11 +64,6 @@ public: WARNING: don't use THROW or PTHROW with such thread safety mechanizm - longjmp would leave global_mutex acquired, which is wrong! */ -# define SYNCHRONIZED AutoSYNCHRONIZED autoSYNCHRONIZED -#else - // not MULTITHREAD-ed, do nothing -# define SYNCHRONIZED -#endif - +#define SYNCHRONIZED AutoSYNCHRONIZED autoSYNCHRONIZED #endif