Nebula
Toggle main menu visibility
Loading...
Searching...
No Matches
posixcriticalsection.h
Go to the documentation of this file.
1
#pragma once
2
#ifndef THREADING_POSIXCRITICALSECTION_H
3
#define THREADING_POSIXCRITICALSECTION_H
4
//------------------------------------------------------------------------------
17
#include "
core/types.h
"
18
#include <pthread.h>
19
20
//------------------------------------------------------------------------------
21
namespace
Posix
22
{
23
class
PosixCriticalSection
24
{
25
public
:
27
PosixCriticalSection
();
29
~PosixCriticalSection
();
31
void
operator=
(
PosixCriticalSection
&& rhs);
33
void
Enter
()
const
;
35
void
Leave
()
const
;
36
private
:
37
pthread_mutex_t*
mutex
;
38
};
39
40
//------------------------------------------------------------------------------
43
inline
44
PosixCriticalSection::PosixCriticalSection
() :
45
mutex
(0)
46
{
47
this->
mutex
=
new
pthread_mutex_t;
48
pthread_mutexattr_t attr;
49
pthread_mutexattr_init(&attr);
50
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
51
pthread_mutex_init(this->
mutex
, &attr);
52
pthread_mutexattr_destroy(&attr);
53
}
54
55
//------------------------------------------------------------------------------
58
inline
59
PosixCriticalSection::~PosixCriticalSection
()
60
{
61
pthread_mutex_destroy(this->
mutex
);
62
delete
this->
mutex
;
63
this->
mutex
= 0;
64
}
65
66
//------------------------------------------------------------------------------
69
inline
void
70
PosixCriticalSection::operator=
(
PosixCriticalSection
&& rhs)
71
{
72
if
(this->
mutex
)
73
{
74
pthread_mutex_destroy(this->
mutex
);
75
delete
this->
mutex
;
76
}
77
this->
mutex
= rhs.mutex;
78
rhs.mutex =
nullptr
;
79
}
80
81
//------------------------------------------------------------------------------
84
inline
85
void
86
PosixCriticalSection::Enter
()
const
87
{
88
pthread_mutex_lock(this->
mutex
);
89
}
90
91
//------------------------------------------------------------------------------
94
inline
95
void
96
PosixCriticalSection::Leave
()
const
97
{
98
pthread_mutex_unlock(this->
mutex
);
99
}
100
101
};
102
//------------------------------------------------------------------------------
103
#endif
Posix::PosixCriticalSection::PosixCriticalSection
PosixCriticalSection()
constructor
Definition
posixcriticalsection.h:44
Posix::PosixCriticalSection::Leave
void Leave() const
leave the critical section
Definition
posixcriticalsection.h:96
Posix::PosixCriticalSection::mutex
pthread_mutex_t * mutex
Definition
posixcriticalsection.h:37
Posix::PosixCriticalSection::Enter
void Enter() const
enter the critical section
Definition
posixcriticalsection.h:86
Posix::PosixCriticalSection::operator=
void operator=(PosixCriticalSection &&rhs)
copy assignment
Definition
posixcriticalsection.h:70
Posix::PosixCriticalSection::~PosixCriticalSection
~PosixCriticalSection()
destructor
Definition
posixcriticalsection.h:59
Posix
Posix implemention of a read-many write-few lock.
Definition
posixsysfunc.cc:21
types.h
code
foundation
threading
posix
posixcriticalsection.h
Generated on
for Nebula. Dark theme by
Tilen Majerle
. All rights reserved.