в POSIX есть mutex и Condition Variables
я когда игрался с POSIX под сигвин делал примерно так:
Код
typedef struct {
pthread_mutex_t lock;
pthread_cond_t event;
bool flag;
}event_t;
static inline void event_init(event_t* event)
{
pthread_mutex_init(&event->lock,0);
pthread_cond_init(&event->event,0);
event->flag=false;
}
static inline void event_set(event_t* event)
{
pthread_mutex_lock(&event->lock);
if (!event->flag) {
event->flag=true;
pthread_cond_signal(&event->event);
}
pthread_mutex_unlock(&event->lock);
}
static inline bool event_wait(event_t* event, unsigned s_timeout)
{
bool r;
pthread_mutex_lock(&event->lock);
if(!event->flag) {
if (s_timeout) {
timespec_t timer;
clock_gettime(CLOCK_REALTIME,&timer);
timer.tv_sec+=s_timeout;
pthread_cond_timedwait(&event->event,&event->lock,&timer);
}else {
do {
pthread_cond_wait(&event->event,&event->lock);
}while(!event->flag);
}
}
r=event->flag;
event->flag=false;
pthread_mutex_unlock(&event->lock);
return r;
}