DDNet documentation
Toggle main menu visibility
Loading...
Searching...
No Matches
jobs.h
Go to the documentation of this file.
1
/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */
2
/* If you are missing that file, acquire a complete release at teeworlds.com. */
3
#ifndef ENGINE_SHARED_JOBS_H
4
#define ENGINE_SHARED_JOBS_H
5
6
#include <
base/lock.h
>
7
#include <
base/sphore.h
>
8
9
#include <atomic>
10
#include <deque>
11
#include <memory>
12
#include <vector>
13
19
27
class
IJob
28
{
29
friend
class
CJobPool
;
30
31
public
:
35
enum
EJobState
36
{
40
STATE_QUEUED
= 0,
41
45
STATE_RUNNING
,
46
50
STATE_DONE
,
51
58
STATE_ABORTED
,
59
};
60
61
private
:
62
std::shared_ptr<IJob>
m_pNext
;
63
std::atomic<EJobState>
m_State
;
64
std::atomic<bool>
m_Abortable
;
65
66
protected
:
70
virtual
void
Run
() = 0;
71
79
void
Abortable
(
bool
Abortable
);
80
81
public
:
82
IJob
();
83
virtual
~IJob
();
84
85
IJob
(
const
IJob
&Other) =
delete
;
86
IJob
&
operator=
(
const
IJob
&Other) =
delete
;
87
97
EJobState
State
()
const
;
98
109
bool
Done
()
const
;
110
119
virtual
bool
Abort
();
120
131
bool
IsAbortable
()
const
;
132
};
133
141
class
CJobPool
142
{
143
std::vector<void *>
m_vpThreads
;
144
std::atomic<bool>
m_Shutdown
;
145
146
CLock
m_Lock
;
147
SEMAPHORE
m_Semaphore
;
148
std::shared_ptr<IJob> m_pFirstJob
GUARDED_BY
(
m_Lock
);
149
std::shared_ptr<IJob> m_pLastJob
GUARDED_BY
(
m_Lock
);
150
151
CLock
m_LockRunning
;
152
std::deque<std::shared_ptr<IJob>> m_RunningJobs
GUARDED_BY
(
m_LockRunning
);
153
154
static
void
WorkerThread
(
void
*pUser)
NO_THREAD_SAFETY_ANALYSIS
;
155
void
RunLoop
()
NO_THREAD_SAFETY_ANALYSIS
;
156
157
public:
158
CJobPool
();
159
~
CJobPool
();
160
168
void
Init
(
int
NumThreads)
REQUIRES
(!
m_Lock
);
169
176
void
Shutdown
()
REQUIRES
(!
m_Lock
)
REQUIRES
(!
m_LockRunning
);
177
186
void
Add
(std::shared_ptr<
IJob
> pJob)
REQUIRES
(!
m_Lock
);
187
};
188
#endif
CJobPool::m_Lock
CLock m_Lock
Definition
jobs.h:146
CJobPool::Add
void Add(std::shared_ptr< IJob > pJob) REQUIRES(!m_Lock)
Definition
jobs.cpp:213
CJobPool::GUARDED_BY
std::shared_ptr< IJob > m_pFirstJob GUARDED_BY(m_Lock)
CJobPool::WorkerThread
static void WorkerThread(void *pUser) NO_THREAD_SAFETY_ANALYSIS
Definition
jobs.cpp:63
CJobPool::GUARDED_BY
std::shared_ptr< IJob > m_pLastJob GUARDED_BY(m_Lock)
CJobPool::RunLoop
void RunLoop() NO_THREAD_SAFETY_ANALYSIS
Definition
jobs.cpp:68
CJobPool::Shutdown
void Shutdown() REQUIRES(!m_Lock) REQUIRES(!m_LockRunning)
Definition
jobs.cpp:153
CJobPool::CJobPool
CJobPool()
Definition
jobs.cpp:50
CJobPool::m_Semaphore
SEMAPHORE m_Semaphore
Definition
jobs.h:147
CJobPool::Init
void Init(int NumThreads) REQUIRES(!m_Lock)
Definition
jobs.cpp:133
CJobPool::GUARDED_BY
std::deque< std::shared_ptr< IJob > > m_RunningJobs GUARDED_BY(m_LockRunning)
CJobPool::m_vpThreads
std::vector< void * > m_vpThreads
Definition
jobs.h:143
CJobPool::m_Shutdown
std::atomic< bool > m_Shutdown
Definition
jobs.h:144
CJobPool::m_LockRunning
CLock m_LockRunning
Definition
jobs.h:151
CLock
Definition
lock.h:90
IJob
Definition
jobs.h:28
IJob::Run
virtual void Run()=0
IJob::IsAbortable
bool IsAbortable() const
Definition
jobs.cpp:45
IJob::Done
bool Done() const
Definition
jobs.cpp:25
IJob::EJobState
EJobState
Definition
jobs.h:36
IJob::STATE_QUEUED
@ STATE_QUEUED
Definition
jobs.h:40
IJob::STATE_RUNNING
@ STATE_RUNNING
Definition
jobs.h:45
IJob::STATE_DONE
@ STATE_DONE
Definition
jobs.h:50
IJob::STATE_ABORTED
@ STATE_ABORTED
Definition
jobs.h:58
IJob::~IJob
virtual ~IJob()
IJob::CJobPool
friend class CJobPool
Definition
jobs.h:29
IJob::Abortable
void Abortable(bool Abortable)
Definition
jobs.cpp:40
IJob::State
EJobState State() const
Definition
jobs.cpp:20
IJob::IJob
IJob()
Definition
jobs.cpp:11
IJob::Abort
virtual bool Abort()
Definition
jobs.cpp:31
IJob::m_Abortable
std::atomic< bool > m_Abortable
Definition
jobs.h:64
IJob::m_State
std::atomic< EJobState > m_State
Definition
jobs.h:63
IJob::m_pNext
std::shared_ptr< IJob > m_pNext
Definition
jobs.h:62
IJob::IJob
IJob(const IJob &Other)=delete
IJob::operator=
IJob & operator=(const IJob &Other)=delete
SEMAPHORE
sem_t SEMAPHORE
Definition
sphore.h:33
lock.h
REQUIRES
#define REQUIRES(...)
Definition
lock.h:34
NO_THREAD_SAFETY_ANALYSIS
#define NO_THREAD_SAFETY_ANALYSIS
Definition
lock.h:73
sphore.h
src
engine
shared
jobs.h
Generated by
1.18.0