C++11 library providing functionality common to all adapters.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libpEpAdapter/Semaphore.hh

44 lines
1.0 KiB

#include <mutex>
#include <condition_variable>
namespace pEp {
class Semaphore {
2 years ago
std::mutex mtx;
std::condition_variable cv;
// Atomic types are types that encapsulate a value whose access is guaranteed
// to not cause data races and can be used to synchronize memory accesses among
// different threads.
// To synchronize threads, ALWAYS use <atomic> types
std::atomic_bool _stop;
2 years ago
public:
2 years ago
Semaphore() : _stop(false) { }
void stop()
{
std::unique_lock<std::mutex> lock(mtx);
_stop.store(true);
}
void try_wait()
{
std::unique_lock<std::mutex> lock(mtx);
if (_stop.load() == false) {
return;
}
while(_stop.load() == true) {
cv.wait(lock);
}
}
void go()
{
std::unique_lock<std::mutex> lock(mtx);
_stop.store(false);
cv.notify_all();
}
};
}