From c243530687e5eb59da914f817fa68371e7f7a512 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 25 Jun 2018 19:13:46 -0400 Subject: [PATCH] Update for review #125 --- nx/include/switch/kernel/semaphore.h | 39 ++++++++++++--------------- nx/source/kernel/semaphore.c | 40 +++++++++++++--------------- 2 files changed, 35 insertions(+), 44 deletions(-) diff --git a/nx/include/switch/kernel/semaphore.h b/nx/include/switch/kernel/semaphore.h index 8b862459..a82caa8a 100644 --- a/nx/include/switch/kernel/semaphore.h +++ b/nx/include/switch/kernel/semaphore.h @@ -1,29 +1,24 @@ -// Copyright 2018 Kevoot - -#ifndef __SEMAPHORE_H -#define __SEMAPHORE_H +/** + * @file semaphore.h + * @brief Thread synchronization based on Mutex. + * @author Kevoot + * @copyright libnx Authors + */ +#pragma once #include "mutex.h" -#define SEM_DOWN false -#define SEM_UP true - -#define EBUSY 1 - -typedef struct sem_t +typedef struct Semaphore { - bool flag; + bool is_up; Mutex mutex; -} sem_t; +} Semaphore; -void sem_init(sem_t *); -void sem_uninit(sem_t *); +void semaphoreInit(Semaphore *); /* TODO */ -void set_post(sem_t *); -void sem_up(sem_t *); -void sem_down(sem_t *); -void sem_wait(sem_t *); -void sem_waitup(sem_t *); -bool sem_isup(sem_t *); - -#endif \ No newline at end of file +void semaphorePost(Semaphore *); +void semaphoreUp(Semaphore *); +void semaphoreDown(Semaphore *); +void semaphoreWait(Semaphore *); +void semaphoreWaitUp(Semaphore *); +bool semaphoreIsUp(Semaphore *); diff --git a/nx/source/kernel/semaphore.c b/nx/source/kernel/semaphore.c index fe0df97f..2d17dc09 100644 --- a/nx/source/kernel/semaphore.c +++ b/nx/source/kernel/semaphore.c @@ -2,52 +2,48 @@ #include "kernel/semaphore.h" #include "kernel/svc.h" -void _priv_sem_wait(sem_t *sem, bool flag); +void _privSemaphoreWait(Semaphore *sem, bool is_up); -void sem_down(sem_t *sem) { +void semaphoreDown(Semaphore *sem) { mutexLock(&sem->mutex); - sem->flag = SEM_DOWN; + sem->is_up = false; mutexUnlock(&sem->mutex); } -void sem_init(sem_t *sem) { - sem->flag = SEM_DOWN; +void semaphoreInit(Semaphore *sem) { + sem->is_up = false; mutexInit(&sem->mutex); } - -void sem_uninit(sem_t *sem) { - sem->flag = SEM_DOWN; -} -void sem_up(sem_t *sem) { +void semaphoreUp(Semaphore *sem) { mutexLock(&sem->mutex); - sem->flag = SEM_UP; + sem->is_up = true; mutexUnlock(&sem->mutex); } -void sem_wait(sem_t *sem) { - _priv_sem_wait(sem, SEM_DOWN); +void semaphoreWait(Semaphore *sem) { + _privSemaphoreWait(sem, false); } -void sem_waitup(sem_t *sem) { - _priv_sem_wait(sem, SEM_UP); +void semaphoreWaitUp(Semaphore *sem) { + _privSemaphoreWait(sem, true); } -bool sem_isup(sem_t *sem) { - bool flag; +bool semaphoreIsUp(Semaphore *sem) { + bool is_up; mutexLock(&sem->mutex); - flag = sem->flag; + is_up = sem->is_up; mutexUnlock(&sem->mutex); - return flag; + return is_up; } -void _priv_sem_wait(sem_t *sem, bool flag) { +void _SemaphoreWait(Semaphore *sem, bool is_up) { while (true) { mutexLock(&sem->mutex); - if (sem->flag == flag) { + if (sem->is_up == is_up) { mutexUnlock(&sem->mutex); break; } @@ -55,4 +51,4 @@ void _priv_sem_wait(sem_t *sem, bool flag) { mutexUnlock(&sem->mutex); svcSleepThread(1000000); } -} \ No newline at end of file +}