summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/threading/conditional.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-utils/threading/conditional.cpp')
-rw-r--r--source/modules/asura-utils/threading/conditional.cpp136
1 files changed, 67 insertions, 69 deletions
diff --git a/source/modules/asura-utils/threading/conditional.cpp b/source/modules/asura-utils/threading/conditional.cpp
index e49bfde..c4d32d9 100644
--- a/source/modules/asura-utils/threading/conditional.cpp
+++ b/source/modules/asura-utils/threading/conditional.cpp
@@ -1,86 +1,84 @@
#include "conditional.h"
-namespace AsuraEngine
+namespace_begin(AsuraEngine)
+namespace_begin(Threading)
+
+Conditional::Conditional()
+ : m_Waiting(0)
+ , m_Signals(0)
{
- namespace Threading
- {
+}
- Conditional::Conditional()
- : m_Waiting(0)
- , m_Signals(0)
- {
- }
+Conditional::~Conditional()
+{
+}
- Conditional::~Conditional()
- {
- }
+void Conditional::Signal()
+{
+ m_Mutex.Lock();
+ if (m_Waiting > m_Signals)
+ {
+ ++m_Signals;
+ signal(m_WaitSem);
+ m_Mutex.Unlock();
+ wait(m_DoneSem);
+ }
+ else
+ {
+ m_Mutex.Unlock();
+ }
+}
- void Conditional::Signal()
- {
- m_Mutex.Lock();
- if (m_Waiting > m_Signals)
- {
- ++m_Signals;
- signal(m_WaitSem);
- m_Mutex.Unlock();
- wait(m_DoneSem);
- }
- else
- {
- m_Mutex.Unlock();
- }
+void Conditional::Broadcast()
+{
+ m_Mutex.Lock();
+ if (m_Waiting> m_Signals) {
+ int i, num_waiting;
+
+ num_waiting = (m_Waiting - m_Signals);
+ m_Signals = m_Waiting;
+ for (i = 0; i < num_waiting; ++i) {
+ signal(m_WaitSem);
}
-
- void Conditional::Broadcast()
- {
- m_Mutex.Lock();
- if (m_Waiting> m_Signals) {
- int i, num_waiting;
-
- num_waiting = (m_Waiting - m_Signals);
- m_Signals = m_Waiting;
- for (i = 0; i < num_waiting; ++i) {
- signal(m_WaitSem);
- }
- m_Mutex.Unlock();
- for (i = 0; i < num_waiting; ++i) {
- wait(m_DoneSem);
- }
- }
- else {
- m_Mutex.Unlock();
- }
-
+ m_Mutex.Unlock();
+ for (i = 0; i < num_waiting; ++i) {
+ wait(m_DoneSem);
}
+ }
+ else {
+ m_Mutex.Unlock();
+ }
- bool Conditional::Wait(Mutex* mutex, int timeout /*= ASURA_MUTEX_MAXWAIT*/)
- {
- bool retval;
-
- m_Mutex.Lock();
- ++m_Waiting;
- m_Mutex.Unlock();
-
- mutex->Unlock();
+}
- retval = wait(m_WaitSem, timeout);
+bool Conditional::Wait(Mutex* mutex, int timeout /*= ASURA_MUTEX_MAXWAIT*/)
+{
+ bool retval;
- m_Mutex.Lock();
- if (m_Signals > 0) {
- if (!retval) {
- wait(m_WaitSem);
- }
- signal(m_DoneSem);
+ m_Mutex.Lock();
+ ++m_Waiting;
+ m_Mutex.Unlock();
- --m_Signals;
- }
- --m_Waiting;
- m_Mutex.Unlock();
+ mutex->Unlock();
- m_Mutex.Lock();
+ retval = wait(m_WaitSem, timeout);
- return retval;
+ m_Mutex.Lock();
+ if (m_Signals > 0) {
+ if (!retval) {
+ wait(m_WaitSem);
}
+ signal(m_DoneSem);
+ --m_Signals;
}
-} \ No newline at end of file
+ --m_Waiting;
+ m_Mutex.Unlock();
+
+ m_Mutex.Lock();
+
+ return retval;
+}
+
+namespace_end
+namespace_end \ No newline at end of file