Files
helmetc/libxasync/waitgroup.c.at123455
Олег Бородин 0c47735432 renaming
2025-10-12 08:12:00 +02:00

44 lines
709 B
Plaintext

#include <stdlib.h>
//#include <unistd.h>
//#include <semaphore.h>
//#include <pthread.h>
//#include <stdatomic.h>
#include <stdio.h>
#include <waitgroup.h>
wg_t* new_gw(void) {
wg_t* wg = malloc(sizeof(wg_t));
wg->num = 0;
sem_init(&(wg->sem), 1, 0);
return wg;
}
void wg_init(wg_t* wg) {
wg->num = 0;
sem_init(&(wg->sem), 1, 0);
}
void wg_add(wg_t* wg) {
wg->num++;
}
void wg_done(wg_t* wg) {
if ((--wg->num) == 0) sem_post(&(wg->sem));
}
void wg_wait(wg_t* wg) {
if ((wg->num) < 1) sem_post(&(wg->sem));
sem_wait(&(wg->sem));
}
void wg_destroy(wg_t* wg) {
sem_destroy(&(wg->sem));
}
void wg_free(wg_t* wg) {
sem_destroy(&(wg->sem));
free(wg);
}