51 Runnable::operator
delete(
void* p) {
55 Runnable::operator
new(
size_t s) {
56 return heap.ralloc(s);
65#if defined(GECODE_HAS_THREADS) && defined(GECODE_USE_OSX_UNFAIR_MUTEX)
66 l = OS_UNFAIR_LOCK_INIT;
71#ifdef GECODE_HAS_THREADS
72#ifndef GECODE_USE_OSX_UNFAIR_MUTEX
75 os_unfair_lock_lock(&l);
82#ifdef GECODE_HAS_THREADS
83#ifndef GECODE_USE_OSX_UNFAIR_MUTEX
86 return os_unfair_lock_trylock(&l);
95#ifdef GECODE_HAS_THREADS
96#ifndef GECODE_USE_OSX_UNFAIR_MUTEX
99 os_unfair_lock_unlock(&l);
105 Mutex::operator
new(
size_t s) {
110 Mutex::operator
delete(
void* p) {
134#ifdef GECODE_HAS_THREADS
135 std::unique_lock<std::mutex> l(m);
144#ifdef GECODE_HAS_THREADS
145 std::unique_lock<std::mutex> l(m);
146 c.wait(l, [
this]{
return this->s;});
157#ifdef GECODE_HAS_THREADS
158 std::this_thread::sleep_for(std::chrono::milliseconds(ms));
163 forceinline
unsigned int
165#ifdef GECODE_HAS_THREADS
166 return std::thread::hardware_concurrency();
179 if (
idle !=
nullptr) {
190 Thread::Run::operator
delete(
void* p) {
194 Thread::Run::operator
new(
size_t s) {
195 return heap.ralloc(s);
void wait(void)
Wait until the event becomes signalled.
Event(void)
Initialize event.
void signal(void)
Signal the event.
Lock(Mutex &m0)
Enter lock.
A mutex for mutual exclausion among several threads.
Mutex(void)
Initialize mutex.
void release(void)
Release the mutex.
bool tryacquire(void)
Try to acquire the mutex, return true if successful.
void acquire(void)
Acquire the mutex and possibly block.
An interface for objects that can be run by a thread.
Runnable(bool d=true)
Initialize, d defines whether object is deleted when terminated.
bool todelete(void) const
Return whether to be deleted upon termination.
void run(Runnable *r)
Run a runnable object.
Event e
Event to wait for next runnable object to execute.
std::atomic< Runnable * > r
Runnable object to execute.
static void run(Runnable *r)
Construct a new thread and run r.
static Mutex * m(void)
Mutex for synchronization.
static void sleep(unsigned int ms)
Put current thread to sleep for ms milliseconds.
static Run * idle
Idle runners.
static unsigned int npu(void)
Return number of processing units (1 if information not available).
Heap heap
The single global heap.
Support algorithms and datastructures
Gecode toplevel namespace