Implement KSynchronizationObject
This commit is contained in:
37
mesosphere/source/core/KSynchronizationObject.cpp
Normal file
37
mesosphere/source/core/KSynchronizationObject.cpp
Normal file
@@ -0,0 +1,37 @@
|
||||
#include <mesosphere/core/KSynchronizationObject.hpp>
|
||||
#include <mesosphere/core/Result.hpp>
|
||||
#include <mesosphere/core/KCoreContext.hpp>
|
||||
#include <mesosphere/threading/KScheduler.hpp>
|
||||
#include <mesosphere/threading/KThread.hpp>
|
||||
|
||||
#include <mutex>
|
||||
|
||||
namespace mesosphere
|
||||
{
|
||||
|
||||
KSynchronizationObject::~KSynchronizationObject()
|
||||
{
|
||||
}
|
||||
|
||||
void KSynchronizationObject::Signal()
|
||||
{
|
||||
std::lock_guard criticalSection{KScheduler::GetCriticalSection()};
|
||||
|
||||
if (IsSignaled()) {
|
||||
for (auto &&waiter : waiters) {
|
||||
waiter->HandleSyncObjectSignaled(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
KLinkedList<KThread *>::const_iterator KSynchronizationObject::AddWaiter(KThread &thread)
|
||||
{
|
||||
return waiters.insert(waiters.end(), &thread);
|
||||
}
|
||||
|
||||
void KSynchronizationObject::RemoveWaiter(KLinkedList<KThread *>::const_iterator it)
|
||||
{
|
||||
waiters.erase(it);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user