ParallelManager.h 950 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #ifndef ANKI_CORE_PARALLEL_MANAGER_H
  2. #define ANKI_CORE_PARALLEL_MANAGER_H
  3. #include "anki/core/ParallelJob.h"
  4. #include <boost/thread.hpp>
  5. #include <boost/ptr_container/ptr_vector.hpp>
  6. namespace anki {
  7. /// The job manager
  8. class ParallelManager
  9. {
  10. public:
  11. /// Default constructor
  12. ParallelManager()
  13. {}
  14. /// Constructor #2
  15. ParallelManager(uint threadsNum)
  16. {
  17. init(threadsNum);
  18. }
  19. /// Init the manager
  20. void init(uint threadsNum);
  21. /// Assign a job to a working thread
  22. void assignNewJob(uint jobId, ParallelJobCallback callback,
  23. ParallelJobParameters& jobParams)
  24. {
  25. jobs[jobId].assignNewJob(callback, jobParams);
  26. }
  27. /// Wait for all jobs to finish
  28. void waitForAllJobsToFinish()
  29. {
  30. barrier->wait();
  31. }
  32. uint getThreadsNum() const
  33. {
  34. return jobs.size();
  35. }
  36. private:
  37. boost::ptr_vector<ParallelJob> jobs; ///< Worker threads
  38. boost::scoped_ptr<boost::barrier> barrier; ///< Synchronization barrier
  39. };
  40. } // end namespace
  41. #endif