mirror of
https://github.com/switchbrew/libnx.git
synced 2025-12-29 22:39:11 +01:00
50 lines
1.2 KiB
C
50 lines
1.2 KiB
C
/**
|
|
* @file barrier.h
|
|
* @brief Barrier synchronization primitive.
|
|
* @author Yordrar
|
|
* @copyright libnx Authors
|
|
*/
|
|
#pragma once
|
|
#include "condvar.h"
|
|
#include "mutex.h"
|
|
#include "thread.h"
|
|
#include "../runtime/util/list.h"
|
|
|
|
typedef struct barrier {
|
|
List threads_registered;
|
|
List threads_waiting;
|
|
Mutex mutex;
|
|
} Barrier;
|
|
|
|
/**
|
|
* @brief Allocates memory for a barrier
|
|
* @param b Barrier object
|
|
*/
|
|
void barrierInit(Barrier* b);
|
|
|
|
/**
|
|
* @brief Frees the memory allocated for a barrier
|
|
* @param b Barrier object
|
|
*/
|
|
void barrierFree(Barrier* b);
|
|
|
|
/**
|
|
* @brief Registers a thread that is going to use the specified barrier
|
|
* @param b Barrier object
|
|
* @param thread The thread to register
|
|
*/
|
|
void barrierRegister(Barrier* b, Thread* thread);
|
|
|
|
/**
|
|
* @brief Unegisters a thread that is not going to use anymore the specified barrier
|
|
* @param b Barrier object
|
|
* @param thread The thread to unregister
|
|
*/
|
|
void barrierUnregister(Barrier* b, Thread* thread);
|
|
|
|
/**
|
|
* @brief Waits until all processes registered in the barrier call this function, if a not registered thread calls this function, it returns without waiting
|
|
* @param b Barrier object
|
|
*/
|
|
void barrierWait(Barrier* b);
|