38 #ifdef GECODE_HAS_UNISTD_H
42 namespace Gecode {
namespace Support {
49 if (pthread_mutex_init(&p_m,NULL) != 0)
50 throw OperatingSystemError(
"Mutex::Mutex[pthread_mutex_init]");
54 if (pthread_mutex_lock(&p_m) != 0)
55 throw OperatingSystemError(
"Mutex::acquire[pthread_mutex_lock]");
59 return pthread_mutex_trylock(&p_m) == 0;
63 if (pthread_mutex_unlock(&p_m) != 0)
64 throw OperatingSystemError(
"Mutex::release[pthread_mutex_unlock]");
68 if (pthread_mutex_destroy(&p_m) != 0)
69 throw OperatingSystemError(
"Mutex::~Mutex[pthread_mutex_destroy]");
78 if (pthread_mutex_init(&p_m,NULL) != 0)
79 throw OperatingSystemError(
"Event::Event[pthread_mutex_init]");
80 if (pthread_cond_init(&p_c,NULL) != 0)
81 throw OperatingSystemError(
"Event::Event[pthread_cond_init]");
85 if (pthread_mutex_lock(&p_m) != 0)
86 throw OperatingSystemError(
"Event::signal[pthread_mutex_lock]");
89 if (pthread_cond_signal(&p_c) != 0)
90 throw OperatingSystemError(
"Event::signal[pthread_cond_signal]");
92 if (pthread_mutex_unlock(&p_m) != 0)
93 throw OperatingSystemError(
"Event::signal[pthread_mutex_unlock]");
97 if (pthread_mutex_lock(&p_m) != 0)
98 throw OperatingSystemError(
"Event::wait[pthread_mutex_lock]");
100 if (pthread_cond_wait(&p_c,&p_m) != 0)
101 throw OperatingSystemError(
"Event::wait[pthread_cond_wait]");
103 if (pthread_mutex_unlock(&p_m) != 0)
104 throw OperatingSystemError(
"Event::wait[pthread_mutex_unlock]");
107 Event::~Event(
void) {
108 if (pthread_cond_destroy(&p_c) != 0)
109 throw OperatingSystemError(
"Event::~Event[pthread_cond_destroy]");
110 if (pthread_mutex_destroy(&p_m) != 0)
111 throw OperatingSystemError(
"Event::~Event[pthread_mutex_destroy]");
119 Thread::sleep(
unsigned int ms) {
120 #ifdef GECODE_HAS_UNISTD_H
121 unsigned int s = ms / 1000;
132 #ifdef GECODE_HAS_UNISTD_H
133 int n=
static_cast<int>(sysconf(_SC_NPROCESSORS_ONLN));
134 return (n>1) ? n : 1;