ParallelJob.cpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #include "anki/core/ParallelJob.h"
  2. #include "anki/core/ParallelManager.h"
  3. //==============================================================================
  4. // Constructor =
  5. //==============================================================================
  6. ParallelJob::ParallelJob(int id_, const ParallelManager& manager_,
  7. boost::barrier& barrier_)
  8. : id(id_),
  9. barrier(barrier_),
  10. callback(NULL),
  11. manager(manager_)
  12. {
  13. start();
  14. }
  15. //==============================================================================
  16. // assignNewJob =
  17. //==============================================================================
  18. void ParallelJob::assignNewJob(ParallelJobCallback callback_, ParallelJobParameters& jobParams_)
  19. {
  20. boost::mutex::scoped_lock lock(mutex);
  21. callback = callback_;
  22. params = &jobParams_;
  23. lock.unlock();
  24. condVar.notify_one();
  25. }
  26. //==============================================================================
  27. // workingFunc =
  28. //==============================================================================
  29. void ParallelJob::workingFunc()
  30. {
  31. while(1)
  32. {
  33. // Wait for something
  34. {
  35. boost::mutex::scoped_lock lock(mutex);
  36. while(callback == NULL)
  37. {
  38. condVar.wait(lock);
  39. }
  40. }
  41. // Exec
  42. callback(*params, *this);
  43. // Nullify
  44. {
  45. boost::mutex::scoped_lock lock(mutex);
  46. callback = NULL;
  47. }
  48. barrier.wait();
  49. }
  50. }