comparison thread/AsynchronousTask.h @ 68:09aba2ccd94a

* Fix race condition
author cannam
date Mon, 18 May 2009 15:44:03 +0000
parents 516c86946900
children 6afa0e011f74
comparison
equal deleted inserted replaced
67:516c86946900 68:09aba2ccd94a
66 m_todo.signal(); 66 m_todo.signal();
67 m_done.lock(); 67 m_done.lock();
68 m_todo.unlock(); 68 m_todo.unlock();
69 } 69 }
70 void awaitTask() { 70 void awaitTask() {
71 m_done.lock();
71 while (m_inTask) m_done.wait(); 72 while (m_inTask) m_done.wait();
72 m_done.unlock(); 73 m_done.unlock();
73 } 74 }
74 75
75 virtual void performTask() = 0; 76 virtual void performTask() = 0;
80 while (!m_finishing) { 81 while (!m_finishing) {
81 while (!m_inTask && !m_finishing) { 82 while (!m_inTask && !m_finishing) {
82 m_todo.wait(); 83 m_todo.wait();
83 } 84 }
84 if (m_finishing) { 85 if (m_finishing) {
86 m_inTask = false;
87 m_done.signal();
85 break; 88 break;
86 } 89 }
87 if (m_inTask) { 90 if (m_inTask) {
88 performTask(); 91 performTask();
89 m_inTask = false; 92 m_inTask = false;