Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Changed thread barrier and event to use a lamba wait predicate instea…
…d of a functor.
  • Loading branch information
SizzlingCalamari committed Nov 10, 2013
1 parent e013a74 commit 3a28afd
Showing 1 changed file with 6 additions and 36 deletions.
42 changes: 6 additions & 36 deletions Source/Core/Common/Src/Thread.h
Expand Up @@ -38,7 +38,7 @@ class Event
public:
Event()
: is_set(false)
{};
{}

void Set()
{
Expand All @@ -53,34 +53,20 @@ class Event
void Wait()
{
std::unique_lock<std::mutex> lk(m_mutex);
m_condvar.wait(lk, IsSet(this));
m_condvar.wait(lk, [&]{ return is_set; });
is_set = false;
}

void Reset()
{
std::unique_lock<std::mutex> lk(m_mutex);
// no other action required, since wait loops on the predicate and any lingering signal will get cleared on the first iteration
// 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:
class IsSet
{
public:
IsSet(const Event* ev)
: m_event(ev)
{}

bool operator()()
{
return m_event->is_set;
}

private:
const Event* const m_event;
};

volatile bool is_set;
std::condition_variable m_condvar;
std::mutex m_mutex;
Expand Down Expand Up @@ -110,28 +96,12 @@ class Barrier
}
else
{
m_condvar.wait(lk, IsDoneWating(this));
m_condvar.wait(lk, [&]{ return (0 == m_waiting); });
return false;
}
}

private:
class IsDoneWating
{
public:
IsDoneWating(const Barrier* bar)
: m_bar(bar)
{}

bool operator()()
{
return (0 == m_bar->m_waiting);
}

private:
const Barrier* const m_bar;
};

std::condition_variable m_condvar;
std::mutex m_mutex;
const size_t m_count;
Expand Down

0 comments on commit 3a28afd

Please sign in to comment.