Program Listing for File semaphore.c
↰ Return to documentation for file (semaphore.c
)
#include <string.h>
#include "netio/netio.h"
static void
check_and_trigger(struct netio_semaphore* sem)
{
if(sem->threshold > 0 && sem->current >= sem->threshold) {
if(sem->cb) {
sem->cb(sem->data);
}
sem->threshold = 0; // semaphores only fire once
}
}
void netio_semaphore_init(struct netio_semaphore* sem, unsigned threshold)
{
memset(sem, 0, sizeof(*sem));
sem->threshold = threshold;
sem->current = 0;
}
void netio_semaphore_increment(struct netio_semaphore* sem, unsigned n)
{
sem->current += n;
check_and_trigger(sem);
}
void netio_semphore_set_threshold(struct netio_semaphore* sem, unsigned t)
{
sem->threshold = t;
check_and_trigger(sem);
}