UltraGrid
UltraGrid Low-Latency High-Resolution Transmission System
Loading...
Searching...
No Matches
worker_pool Class Reference
Inheritance diagram for worker_pool:
Inheritance graph
Collaboration diagram for worker_pool:
Collaboration graph

Public Member Functions

 worker_pool ()
 
 ~worker_pool ()
 
void notify (wp_worker *w)
 
task_result_handle_t run_async (runnable_t task, void *data, bool detached)
 
void * wait_task (task_result_handle_t handle)
 
- Public Member Functions inherited from worker_state_observer
virtual ~worker_state_observer ()
 

Private Attributes

set< wp_worker * > m_empty_workers
 
pthread_mutex_t m_lock
 
set< wp_worker * > m_occupied_workers
 
pthread_cond_t m_worker_finished
 

Detailed Description

Definition at line 183 of file worker.cpp.

Constructor & Destructor Documentation

◆ worker_pool()

worker_pool::worker_pool ( )
inline

Definition at line 186 of file worker.cpp.

186 {
187 pthread_mutex_init(&m_lock, NULL);
188 pthread_cond_init(&m_worker_finished, NULL);
189 }
pthread_mutex_t m_lock
Definition worker.cpp:218
pthread_cond_t m_worker_finished
Definition worker.cpp:219

References m_lock, and m_worker_finished.

◆ ~worker_pool()

worker_pool::~worker_pool ( )
inline

Definition at line 191 of file worker.cpp.

191 {
192 pthread_mutex_lock(&m_lock);
193 while (m_occupied_workers.size() > 0) {
194 pthread_cond_wait(&m_worker_finished, &m_lock);
195 }
196 pthread_mutex_unlock(&m_lock);
197
198 for_each(m_empty_workers.begin(),
200 pthread_cond_destroy(&m_worker_finished);
201 pthread_mutex_destroy(&m_lock);
202 }
set< wp_worker * > m_empty_workers
Definition worker.cpp:216
set< wp_worker * > m_occupied_workers
Definition worker.cpp:217
static void func_delete(wp_worker *arg)
Definition worker.cpp:179

References func_delete(), m_empty_workers, m_lock, m_occupied_workers, and m_worker_finished.

Here is the call graph for this function:

Member Function Documentation

◆ notify()

void worker_pool::notify ( wp_worker * w)
inlinevirtual

Implements worker_state_observer.

Definition at line 204 of file worker.cpp.

204 {
205 pthread_mutex_lock(&m_lock);
206 m_occupied_workers.erase(w);
207 m_empty_workers.insert(w);
208 pthread_mutex_unlock(&m_lock);
209 pthread_cond_signal(&m_worker_finished);
210 }

References m_empty_workers, m_lock, m_occupied_workers, and m_worker_finished.

◆ run_async()

task_result_handle_t worker_pool::run_async ( runnable_t task,
void * data,
bool detached )
Todo
: really weird - it seems like that 'it' instead of 'w' caused some problems

Definition at line 222 of file worker.cpp.

223{
224 wp_worker *w;
225 pthread_mutex_lock(&m_lock);
226 if(m_empty_workers.empty()) {
227 m_empty_workers.insert(new wp_worker(*this));
228 }
229 set<wp_worker*>::iterator it = m_empty_workers.begin();
230 assert(it != m_empty_workers.end());
231 w = *it;
233 m_empty_workers.erase(w);
234 m_occupied_workers.insert(w);
235
236 wp_task_data *d = new wp_task_data(task, data, w, detached);
237 w->push(d);
238 pthread_mutex_unlock(&m_lock);
239
240 return d;
241}
Holds data to be passed to worker.
Definition worker.cpp:65
This class represents a worker that is called from within the pool.
Definition worker.cpp:79
void push(wp_task_data *)
Definition worker.cpp:157

References m_empty_workers, m_lock, m_occupied_workers, and wp_worker::push().

Referenced by task_run_async(), and task_run_async_detached().

Here is the call graph for this function:

◆ wait_task()

void * worker_pool::wait_task ( task_result_handle_t handle)

Definition at line 243 of file worker.cpp.

244{
245 wp_task_data *d = (wp_task_data *) handle;
246 wp_worker *w = d->m_w;
247 return w->pop(d);
248}
struct wp_worker * m_w
Definition worker.cpp:72
void * pop(wp_task_data *)
Definition worker.cpp:165

References wp_task_data::m_w, and wp_worker::pop().

Referenced by wait_task().

Here is the call graph for this function:

Member Data Documentation

◆ m_empty_workers

set<wp_worker*> worker_pool::m_empty_workers
private

Definition at line 216 of file worker.cpp.

Referenced by ~worker_pool(), notify(), and run_async().

◆ m_lock

pthread_mutex_t worker_pool::m_lock
private

Definition at line 218 of file worker.cpp.

Referenced by worker_pool(), ~worker_pool(), notify(), and run_async().

◆ m_occupied_workers

set<wp_worker*> worker_pool::m_occupied_workers
private

Definition at line 217 of file worker.cpp.

Referenced by ~worker_pool(), notify(), and run_async().

◆ m_worker_finished

pthread_cond_t worker_pool::m_worker_finished
private

Definition at line 219 of file worker.cpp.

Referenced by worker_pool(), ~worker_pool(), and notify().


The documentation for this class was generated from the following file: