Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/ElmerGUI/netgen/libsrc/general/parthreads.hpp
3206 views
1
#ifndef FILE_PARTHREADS
2
#define FILE_PARTHREADS
3
4
/**************************************************************************/
5
/* File: parthreads.hh */
6
/* Author: Joachim Schoeberl */
7
/* Date: 22. Nov. 2000 */
8
/**************************************************************************/
9
10
/*
11
Parallel thread, Mutex,
12
*/
13
14
#ifdef NO_PARALLEL_THREADS
15
16
class NgMutex { };
17
18
class NgLock
19
{
20
public:
21
NgLock (NgMutex & mut, bool lock = 0) { ; }
22
void Lock () { ; }
23
void UnLock () { ; }
24
};
25
26
27
#else
28
29
#ifdef _MSC_VER
30
31
class NgMutex
32
{
33
CCriticalSection cs;
34
35
public:
36
NgMutex ()
37
{ ; }
38
friend class NgLock;
39
};
40
41
class NgLock
42
{
43
CSingleLock sl;
44
bool locked;
45
public:
46
NgLock (NgMutex & mut, bool lock = 0)
47
: sl(&mut.cs)
48
{
49
if (lock) sl.Lock();
50
locked = lock;
51
}
52
53
~NgLock ()
54
{
55
if (locked) sl.Unlock();
56
}
57
58
void Lock ()
59
{
60
sl.Lock();
61
locked = 1;
62
}
63
64
void UnLock ()
65
{
66
sl.Unlock();
67
locked = 0;
68
}
69
};
70
71
#else
72
73
74
// #include <pthread.h>
75
76
class NgMutex
77
{
78
pthread_mutex_t mut;
79
public:
80
NgMutex ()
81
{
82
pthread_mutex_init (&mut, NULL);
83
}
84
friend class NgLock;
85
};
86
87
class NgLock
88
{
89
pthread_mutex_t & mut;
90
bool locked;
91
public:
92
NgLock (NgMutex & ngmut, bool lock = false)
93
: mut (ngmut.mut)
94
{
95
if (lock)
96
pthread_mutex_lock (&mut);
97
98
locked = lock;
99
};
100
101
~NgLock()
102
{
103
if (locked)
104
pthread_mutex_unlock (&mut);
105
}
106
107
void Lock ()
108
{
109
pthread_mutex_lock (&mut);
110
locked = true;
111
}
112
void UnLock ()
113
{
114
pthread_mutex_unlock (&mut);
115
locked = false;
116
}
117
/*
118
int TryLock ()
119
{
120
return pthread_mutex_trylock (&mut);
121
}
122
*/
123
};
124
125
#endif
126
127
#endif
128
129
#endif
130
131