diff options
author | MerryMage <MerryMage@users.noreply.github.com> | 2016-04-14 13:53:05 +0200 |
---|---|---|
committer | MerryMage <MerryMage@users.noreply.github.com> | 2016-04-14 14:58:28 +0200 |
commit | 8c508334455629ed88bc49fd2c355d4af99f0c6a (patch) | |
tree | a373092f40d9378e29d7950bfeb6933af84de558 /src/common | |
parent | Merge pull request #1660 from MerryMage/file_util (diff) | |
download | yuzu-8c508334455629ed88bc49fd2c355d4af99f0c6a.tar yuzu-8c508334455629ed88bc49fd2c355d4af99f0c6a.tar.gz yuzu-8c508334455629ed88bc49fd2c355d4af99f0c6a.tar.bz2 yuzu-8c508334455629ed88bc49fd2c355d4af99f0c6a.tar.lz yuzu-8c508334455629ed88bc49fd2c355d4af99f0c6a.tar.xz yuzu-8c508334455629ed88bc49fd2c355d4af99f0c6a.tar.zst yuzu-8c508334455629ed88bc49fd2c355d4af99f0c6a.zip |
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/thread.h | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/src/common/thread.h b/src/common/thread.h index 8255ee6d3..9bd0e8e7f 100644 --- a/src/common/thread.h +++ b/src/common/thread.h @@ -30,8 +30,7 @@ # endif #endif -namespace Common -{ +namespace Common { int CurrentThreadId(); @@ -43,55 +42,55 @@ public: Event() : is_set(false) {} void Set() { - std::lock_guard<std::mutex> lk(m_mutex); + std::lock_guard<std::mutex> lk(mutex); if (!is_set) { is_set = true; - m_condvar.notify_one(); + condvar.notify_one(); } } void Wait() { - std::unique_lock<std::mutex> lk(m_mutex); - m_condvar.wait(lk, [&]{ return is_set; }); + std::unique_lock<std::mutex> lk(mutex); + condvar.wait(lk, [&]{ return is_set; }); is_set = false; } void Reset() { - std::unique_lock<std::mutex> lk(m_mutex); + std::unique_lock<std::mutex> lk(mutex); // no other action required, since wait loops on the predicate and any lingering signal will get cleared on the first iteration is_set = false; } private: bool is_set; - std::condition_variable m_condvar; - std::mutex m_mutex; + std::condition_variable condvar; + std::mutex mutex; }; class Barrier { public: - Barrier(size_t count) : m_count(count), m_waiting(0) {} + explicit Barrier(size_t count_) : count(count_), waiting(0) {} /// Blocks until all "count" threads have called Sync() void Sync() { - std::unique_lock<std::mutex> lk(m_mutex); + std::unique_lock<std::mutex> lk(mutex); // TODO: broken when next round of Sync()s // is entered before all waiting threads return from the notify_all - if (++m_waiting == m_count) { - m_waiting = 0; - m_condvar.notify_all(); + if (++waiting == count) { + waiting = 0; + condvar.notify_all(); } else { - m_condvar.wait(lk, [&]{ return m_waiting == 0; }); + condvar.wait(lk, [&]{ return waiting == 0; }); } } private: - std::condition_variable m_condvar; - std::mutex m_mutex; - const size_t m_count; - size_t m_waiting; + std::condition_variable condvar; + std::mutex mutex; + const size_t count; + size_t waiting; }; void SleepCurrentThread(int ms); @@ -100,8 +99,7 @@ void SwitchCurrentThread(); // On Linux, this is equal to sleep 1ms // Use this function during a spin-wait to make the current thread // relax while another thread is working. This may be more efficient // than using events because event functions use kernel calls. -inline void YieldCPU() -{ +inline void YieldCPU() { std::this_thread::yield(); } |