Path: blob/devel/ElmerGUI/netgen/libsrc/general/parthreads.hpp
3206 views
#ifndef FILE_PARTHREADS1#define FILE_PARTHREADS23/**************************************************************************/4/* File: parthreads.hh */5/* Author: Joachim Schoeberl */6/* Date: 22. Nov. 2000 */7/**************************************************************************/89/*10Parallel thread, Mutex,11*/1213#ifdef NO_PARALLEL_THREADS1415class NgMutex { };1617class NgLock18{19public:20NgLock (NgMutex & mut, bool lock = 0) { ; }21void Lock () { ; }22void UnLock () { ; }23};242526#else2728#ifdef _MSC_VER2930class NgMutex31{32CCriticalSection cs;3334public:35NgMutex ()36{ ; }37friend class NgLock;38};3940class NgLock41{42CSingleLock sl;43bool locked;44public:45NgLock (NgMutex & mut, bool lock = 0)46: sl(&mut.cs)47{48if (lock) sl.Lock();49locked = lock;50}5152~NgLock ()53{54if (locked) sl.Unlock();55}5657void Lock ()58{59sl.Lock();60locked = 1;61}6263void UnLock ()64{65sl.Unlock();66locked = 0;67}68};6970#else717273// #include <pthread.h>7475class NgMutex76{77pthread_mutex_t mut;78public:79NgMutex ()80{81pthread_mutex_init (&mut, NULL);82}83friend class NgLock;84};8586class NgLock87{88pthread_mutex_t & mut;89bool locked;90public:91NgLock (NgMutex & ngmut, bool lock = false)92: mut (ngmut.mut)93{94if (lock)95pthread_mutex_lock (&mut);9697locked = lock;98};99100~NgLock()101{102if (locked)103pthread_mutex_unlock (&mut);104}105106void Lock ()107{108pthread_mutex_lock (&mut);109locked = true;110}111void UnLock ()112{113pthread_mutex_unlock (&mut);114locked = false;115}116/*117int TryLock ()118{119return pthread_mutex_trylock (&mut);120}121*/122};123124#endif125126#endif127128#endif129130131