| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- #include "anki/core/ParallelJob.h"
- #include "anki/core/ParallelManager.h"
- namespace anki {
- //==============================================================================
- // Constructor =
- //==============================================================================
- ParallelJob::ParallelJob(int id_, const ParallelManager& manager_,
- boost::barrier& barrier_)
- : id(id_), barrier(barrier_), callback(NULL), manager(manager_)
- {
- start();
- }
- //==============================================================================
- // assignNewJob =
- //==============================================================================
- void ParallelJob::assignNewJob(ParallelJobCallback callback_,
- ParallelJobParameters& jobParams_)
- {
- boost::mutex::scoped_lock lock(mutex);
- callback = callback_;
- params = &jobParams_;
- lock.unlock();
- condVar.notify_one();
- }
- //==============================================================================
- // workingFunc =
- //==============================================================================
- void ParallelJob::workingFunc()
- {
- while(1)
- {
- // Wait for something
- {
- boost::mutex::scoped_lock lock(mutex);
- while(callback == NULL)
- {
- condVar.wait(lock);
- }
- }
- // Exec
- callback(*params, *this);
- // Nullify
- {
- boost::mutex::scoped_lock lock(mutex);
- callback = NULL;
- }
- barrier.wait();
- }
- }
- } // end namespace
|