44 lines
709 B
Plaintext
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);
|
|
}
|