ConcurrentQueue: Update to HEAD

This commit is contained in:
Kyle Schwarz
2022-09-09 15:46:46 -04:00
parent b35fab754c
commit 2e296dc8d3
208 changed files with 42592 additions and 274 deletions
@@ -0,0 +1,90 @@
// Copyright (C) 2006 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_RSIGNALER_EXTENSIOn_
#define DLIB_RSIGNALER_EXTENSIOn_
#include "rsignaler_extension_abstract.h"
#include "rmutex_extension.h"
namespace dlib
{
// ----------------------------------------------------------------------------------------
class rsignaler
{
public:
rsignaler (
const rmutex& associated_mutex
) :
assoc_mutex(associated_mutex),
s(m)
{}
~rsignaler (
)
{}
void wait (
) const
{
m.lock();
const unsigned long lock_count = assoc_mutex.lock_count();
assoc_mutex.unlock(lock_count);
s.wait();
m.unlock();
assoc_mutex.lock(lock_count);
}
bool wait_or_timeout (
unsigned long milliseconds
) const
{
m.lock();
const unsigned long lock_count = assoc_mutex.lock_count();
assoc_mutex.unlock(lock_count);
bool res = s.wait_or_timeout(milliseconds);
m.unlock();
assoc_mutex.lock(lock_count);
return res;
}
void signal (
) const
{
m.lock();
s.signal();
m.unlock();
}
void broadcast (
) const
{
m.lock();
s.broadcast();
m.unlock();
}
const rmutex& get_mutex (
) const { return assoc_mutex; }
private:
const rmutex& assoc_mutex;
mutex m;
signaler s;
// restricted functions
rsignaler(rsignaler&); // copy constructor
rsignaler& operator=(rsignaler&); // assignment operator
};
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_RSIGNALER_EXTENSIOn_