summaryrefslogtreecommitdiff
path: root/source/modules/asura-utils/Threads/Conditional.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-07 21:08:47 +0800
committerchai <chaifix@163.com>2019-08-07 21:08:47 +0800
commit0c391fdbce5a079cf03e483eb6174dd47806163d (patch)
treeb06cd7a9d0ae0d9bb9e82f3dcb786dfce11f8628 /source/modules/asura-utils/Threads/Conditional.cpp
parent9686368e58e25cbd6dc37d686bdd2be3f80486d6 (diff)
*misc
Diffstat (limited to 'source/modules/asura-utils/Threads/Conditional.cpp')
-rw-r--r--source/modules/asura-utils/Threads/Conditional.cpp84
1 files changed, 0 insertions, 84 deletions
diff --git a/source/modules/asura-utils/Threads/Conditional.cpp b/source/modules/asura-utils/Threads/Conditional.cpp
deleted file mode 100644
index f86a81e..0000000
--- a/source/modules/asura-utils/Threads/Conditional.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "Conditional.h"
-
-namespace_begin(AsuraEngine)
-namespace_begin(Threads)
-
-Conditional::Conditional()
- : m_Waiting(0)
- , m_Signals(0)
-{
-}
-
-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::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();
- }
-
-}
-
-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);
-
- m_Mutex.Lock();
- if (m_Signals > 0) {
- if (!retval) {
- wait(m_WaitSem);
- }
- signal(m_DoneSem);
-
- --m_Signals;
- }
- --m_Waiting;
- m_Mutex.Unlock();
-
- m_Mutex.Lock();
-
- return retval;
-}
-
-namespace_end
-namespace_end \ No newline at end of file