/usr/include/dlib/threads/rsignaler_extension.h is in libdlib-dev 18.18-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | // 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_
|