DDNet documentation
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
27class IJob
28{
29 friend class CJobPool;
30
31public:
60
61private:
62 std::shared_ptr<IJob> m_pNext;
63 std::atomic<EJobState> m_State;
64 std::atomic<bool> m_Abortable;
65
66protected:
70 virtual void Run() = 0;
71
79 void Abortable(bool Abortable);
80
81public:
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
142{
143 std::vector<void *> m_vpThreads;
144 std::atomic<bool> m_Shutdown;
145
148 std::shared_ptr<IJob> m_pFirstJob GUARDED_BY(m_Lock);
149 std::shared_ptr<IJob> m_pLastJob GUARDED_BY(m_Lock);
150
152 std::deque<std::shared_ptr<IJob>> m_RunningJobs GUARDED_BY(m_LockRunning);
153
154 static void WorkerThread(void *pUser) NO_THREAD_SAFETY_ANALYSIS;
156
157public:
158 CJobPool();
159 ~CJobPool();
160
168 void Init(int NumThreads) REQUIRES(!m_Lock);
169
177
186 void Add(std::shared_ptr<IJob> pJob) REQUIRES(!m_Lock);
187};
188#endif
CLock m_Lock
Definition jobs.h:146
void Add(std::shared_ptr< IJob > pJob) REQUIRES(!m_Lock)
Definition jobs.cpp:213
std::shared_ptr< IJob > m_pFirstJob GUARDED_BY(m_Lock)
static void WorkerThread(void *pUser) NO_THREAD_SAFETY_ANALYSIS
Definition jobs.cpp:63
std::shared_ptr< IJob > m_pLastJob GUARDED_BY(m_Lock)
void RunLoop() NO_THREAD_SAFETY_ANALYSIS
Definition jobs.cpp:68
void Shutdown() REQUIRES(!m_Lock) REQUIRES(!m_LockRunning)
Definition jobs.cpp:153
CJobPool()
Definition jobs.cpp:50
SEMAPHORE m_Semaphore
Definition jobs.h:147
void Init(int NumThreads) REQUIRES(!m_Lock)
Definition jobs.cpp:133
std::deque< std::shared_ptr< IJob > > m_RunningJobs GUARDED_BY(m_LockRunning)
std::vector< void * > m_vpThreads
Definition jobs.h:143
std::atomic< bool > m_Shutdown
Definition jobs.h:144
CLock m_LockRunning
Definition jobs.h:151
Definition lock.h:90
Definition jobs.h:28
virtual void Run()=0
bool IsAbortable() const
Definition jobs.cpp:45
bool Done() const
Definition jobs.cpp:25
EJobState
Definition jobs.h:36
@ STATE_QUEUED
Definition jobs.h:40
@ STATE_RUNNING
Definition jobs.h:45
@ STATE_DONE
Definition jobs.h:50
@ STATE_ABORTED
Definition jobs.h:58
virtual ~IJob()
friend class CJobPool
Definition jobs.h:29
void Abortable(bool Abortable)
Definition jobs.cpp:40
EJobState State() const
Definition jobs.cpp:20
IJob()
Definition jobs.cpp:11
virtual bool Abort()
Definition jobs.cpp:31
std::atomic< bool > m_Abortable
Definition jobs.h:64
std::atomic< EJobState > m_State
Definition jobs.h:63
std::shared_ptr< IJob > m_pNext
Definition jobs.h:62
IJob(const IJob &Other)=delete
IJob & operator=(const IJob &Other)=delete
sem_t SEMAPHORE
Definition sphore.h:33
#define REQUIRES(...)
Definition lock.h:34
#define NO_THREAD_SAFETY_ANALYSIS
Definition lock.h:73