1 #include <samchon/library/SharedAcquire.hpp> 4 #include <samchon/library/Semaphore.hpp> 12 SharedAcquire::SharedAcquire(
Semaphore &semaphore,
bool doLock)
17 this->semaphore = &semaphore;
19 this->reference =
new atomic<size_t>(1);
20 this->isLocked =
new atomic<bool>(doLock);
33 this->semaphore = obj.semaphore;
34 this->reference = obj.reference;
35 this->isLocked = obj.isLocked;
38 obj.semaphore =
nullptr;
39 obj.reference =
nullptr;
40 obj.isLocked =
nullptr;
43 SharedAcquire::~SharedAcquire()
45 if(reference ==
nullptr || reference->operator--() > 0)
48 if(isLocked->load() ==
true)
58 void SharedAcquire::acquire()
60 if(isLocked->load() ==
true)
64 isLocked->store(
true);
66 void SharedAcquire::release()
68 if(isLocked->load() ==
false)
72 isLocked->store(
false);
void acquire()
Acquire admission.
Shared acquire from a Semaphore.
Semaphore * semaphore
Managed Semaphore.
std::atomic< bool > * isLocked
Whether the mutex was locked by SharedAcquire.
std::atomic< size_t > * reference
Referencing count sharing same Semaphore.