fix: implemented barrier myself becauser MacOSX is DOGSHIT

This commit is contained in:
Afonso Clerigo Mendes de Sousa 2026-03-24 16:12:33 +00:00
parent 7cdecceef2
commit d35d7bff69
3 changed files with 74 additions and 1 deletions

68
include/pthread_barrier.h Normal file
View File

@ -0,0 +1,68 @@
#ifdef __APPLE__
#ifndef PTHREAD_BARRIER_H_
#define PTHREAD_BARRIER_H_
#include <pthread.h>
#include <errno.h>
typedef int pthread_barrierattr_t;
typedef struct
{
pthread_mutex_t mutex;
pthread_cond_t cond;
int count;
int tripCount;
} pthread_barrier_t;
int pthread_barrier_init(pthread_barrier_t *barrier, const pthread_barrierattr_t *attr, unsigned int count)
{
if(count == 0)
{
errno = EINVAL;
return -1;
}
if(pthread_mutex_init(&barrier->mutex, 0) < 0)
{
return -1;
}
if(pthread_cond_init(&barrier->cond, 0) < 0)
{
pthread_mutex_destroy(&barrier->mutex);
return -1;
}
barrier->tripCount = count;
barrier->count = 0;
return 0;
}
int pthread_barrier_destroy(pthread_barrier_t *barrier)
{
pthread_cond_destroy(&barrier->cond);
pthread_mutex_destroy(&barrier->mutex);
return 0;
}
int pthread_barrier_wait(pthread_barrier_t *barrier)
{
pthread_mutex_lock(&barrier->mutex);
++(barrier->count);
if(barrier->count >= barrier->tripCount)
{
barrier->count = 0;
pthread_cond_broadcast(&barrier->cond);
pthread_mutex_unlock(&barrier->mutex);
return 1;
}
else
{
pthread_cond_wait(&barrier->cond, &(barrier->mutex));
pthread_mutex_unlock(&barrier->mutex);
return 0;
}
}
#endif // PTHREAD_BARRIER_H_
#endif // __APPLE__

BIN
psystem

Binary file not shown.

View File

@ -1,4 +1,9 @@
#include "main.h" #include "main.h"
#ifdef __APPLE__
#include "pthread_barrier.h"
#endif
#include "axis.h" #include "axis.h"
#include "camera.h" #include "camera.h"
#include "grid.h" #include "grid.h"
@ -26,7 +31,7 @@ const unsigned int SCR_WIDTH = 2560;
const unsigned int SCR_HEIGHT = 1440; const unsigned int SCR_HEIGHT = 1440;
const char *glsl_version; const char *glsl_version;
const unsigned int PARTICLE_COUNT = 500; const unsigned int PARTICLE_COUNT = 5000;
GLFWwindow *window; GLFWwindow *window;
unsigned int VBO, VAO; unsigned int VBO, VAO;