summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/threading/conditional.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-07-31 21:35:12 +0800
committerchai <chaifix@163.com>2019-07-31 21:35:12 +0800
commit084623519e95f0ab0cf4bc328b5fa736d679c5bd (patch)
tree9d409dceda50335e9fb881fc5107c9c1c561f988 /source/modules/asura-utils/threading/conditional.cpp
parent012a44bd13ab41d056e7d3884a39027b6cea62b5 (diff)
*修改名称空间风格
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