plat_sem_destroy(&q->items_sem);

This commit is contained in:
2026-03-09 17:27:45 +01:00
parent 7d8b4addb7
commit f3c4cb7b76
3 changed files with 63 additions and 6 deletions

53
base.h
View File

@@ -97,6 +97,8 @@ typedef double f64;
#if defined(_WIN32) || defined(_WIN64)
// Memory allocation
static u32 plat_get_pagesize(void) {
SYSTEM_INFO sysinfo = {0};
GetSystemInfo(&sysinfo);
@@ -121,8 +123,35 @@ static b32 plat_mem_release(void *ptr, u64 size) {
return VirtualFree(ptr, size, MEM_RELEASE);
}
// Semaphores
typedef struct plat_sem {
HANDLE handle;
} plat_sem;
static b32 plat_sem_init(plat_sem *s, u32 initial) {
s->handle = CreateSemaphore(NULL, initial, LONG_MAX, NULL);
return s->handle != NULL;
}
static void plat_sem_wait(plat_sem *s) {
WaitForSingleObject(s->handle, INFINITE);
}
static void plat_sem_post(plat_sem *s, u32 count) {
ReleaseSemaphore(s->handle, count, NULL);
}
static void plat_sem_destroy(plat_sem *s) {
if (s->handle) {
CloseHandle(s->handle);
s->handle = NULL;
}
}
#elif defined(__linux__)
// Memory allocation
#ifndef _DEFAULT_SOURCE
#define _DEFAULT_SOURCE
#endif
@@ -158,4 +187,28 @@ static b32 plat_mem_release(void *ptr, u64 size) {
return ret == 0;
}
// Semaphores
#include <semaphore.h>
typedef struct plat_sem {
sem_t sem;
} plat_sem;
static b32 plat_sem_init(plat_sem *s, u32 initial) {
return sem_init(&s->sem, 0, initial) == 0;
}
static void plat_sem_wait(plat_sem *s) {
while (sem_wait(&s->sem) == -1 && errno == EINTR) {
}
}
static void plat_sem_post(plat_sem *s, u32 count) {
for (u32 i = 0; i < count; i++) {
sem_post(&s->sem);
}
}
static void plat_sem_destroy(plat_sem *s) { sem_destroy(&s->sem); }
#endif