4 #include "os_workqueue.hpp"
10 * return 0 on batch complete, -1 on thread exit request.
12 int WorkQueue::run_tasks(void)
14 os::unique_lock<os::mutex> lock(mutex);
16 while (work_queue.empty() && !exit_workqueue) {
24 std::queue<WorkQueueWork *> batch;
25 std::swap(work_queue, batch);
30 assert(!batch.empty());
31 while (!batch.empty()) {
43 complete_cond.signal();
48 /* Must be called with WorkQueue::lock held */
49 void WorkQueue::wake_up_thread(void)
54 void WorkQueue::queue_work(WorkQueueWork *task)
57 work_queue.push(task);
62 void WorkQueue::flush(void)
64 os::unique_lock<os::mutex> lock(mutex);
65 while (!work_queue.empty() || busy) {
66 complete_cond.wait(lock);
70 void WorkQueue::thread_entry(void)
79 void WorkQueue::destroy(void)
82 exit_workqueue = true;
93 WorkQueue__entry_thunk(void *data)
95 WorkQueue *thread = static_cast<WorkQueue *>(data);
97 thread->thread_entry();
106 WorkQueue::WorkQueue(void) :
108 exit_workqueue(false),
109 thread(WorkQueue__entry_thunk, this)
113 WorkQueue::~WorkQueue(void)