Advertisement
Guest User

GN53 Multithreading Example

a guest
Nov 8th, 2016
2,086
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.45 KB | None | 0 0
  1. //Data Members
  2.  
  3. typedef std::array<pixel_buffer_object, 5> array_t;
  4. typedef std::vector<vu8> work_t;
  5.  
  6. const int                 m_w;
  7. const int                 m_h;
  8. const int                 m_bytes;
  9. array_t                   m_pbos;
  10. array_t::iterator         m_pbo_iter = m_pbos.begin();
  11. boost::thread             m_thread;
  12. boost::atomic<u32>        m_atomic_remaining{0};
  13. boost::mutex              m_shared_mutex;
  14. work_t                    m_shared_work;
  15. boost::condition_variable m_shared_cv;
  16.  
  17.  
  18. //Producer
  19.  
  20. template <typename... Args> void send_work(Args&&... args) {
  21.     boost::unique_lock<boost::mutex> ul(m_shared_mutex);
  22.  
  23.     const bool must_notify = m_shared_work.empty();
  24.  
  25.     m_shared_work.emplace_back(std::forward<Args>(args)...);
  26.  
  27.     ul.unlock();
  28.  
  29.     if (must_notify) {
  30.         m_shared_cv.notify_one();
  31.     }
  32. }
  33.  
  34.  
  35. //Consumer
  36.  
  37. void worker_thread() {
  38.     u32 highest_num = highest_numbered_screenshot();
  39.  
  40.     for (work_t local_work; ; local_work.clear()) {
  41.         boost::unique_lock<boost::mutex> ul(m_shared_mutex);
  42.  
  43.         while (m_shared_work.empty()) {
  44.             m_shared_cv.wait(ul);
  45.         }
  46.  
  47.         m_shared_work.swap(local_work);
  48.  
  49.         ul.unlock();
  50.  
  51.         for (auto& v : local_work) {
  52.             if (v.empty()) {
  53.                 return;
  54.             }
  55.  
  56.             erase_alpha(v);
  57.  
  58.             write_screenshot(m_w, m_h, v, ++highest_num);
  59.  
  60.             --m_atomic_remaining;
  61.         }
  62.     }
  63. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement