mirror of
https://github.com/kanjitalk755/macemu.git
synced 2024-06-27 01:29:29 +00:00
45 lines
1.2 KiB
C
45 lines
1.2 KiB
C
#ifndef __SEMAPHORE_H
|
|
#define __SEMAPHORE_H
|
|
|
|
#define SEM_VALUE_MAX 64
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
extern "C" {
|
|
#endif /* c_plusplus || __cplusplus */
|
|
|
|
/* MacOS X doesn't implement unnamed POSIX semaphores, event though
|
|
the libc defines them! */
|
|
#if (defined(__MACH__) && defined(__APPLE__))
|
|
#include <mach/mach_init.h>
|
|
#include <mach/task.h>
|
|
#include <mach/semaphore.h>
|
|
|
|
#define sem_t semaphore_t
|
|
#define sem_init(SEM,UNUSED,VALUE) semaphore_create(current_task(), (SEM), SYNC_POLICY_FIFO, (VALUE))
|
|
#define sem_destroy(SEM) semaphore_destroy(current_task(), *(SEM))
|
|
#define sem_wait(SEM) semaphore_wait(*(SEM))
|
|
#define sem_post(SEM) semaphore_signal(*(SEM))
|
|
#else
|
|
typedef struct psem {
|
|
pthread_mutex_t sem_lock;
|
|
int sem_value;
|
|
int sem_waiting;
|
|
} sem_t;
|
|
|
|
int sem_init(sem_t* sem, int pshared, unsigned int value);
|
|
int sem_destroy(sem_t* sem);
|
|
sem_t sem_open(const char* name, int oflag, ...);
|
|
int sem_close(sem_t* sem);
|
|
int sem_unlink(const char* name);
|
|
int sem_wait(sem_t* sem);
|
|
int sem_trywait(sem_t* sem);
|
|
int sem_post(sem_t* sem);
|
|
int sem_getvalue(sem_t* sem, int* sval);
|
|
#endif
|
|
|
|
#if defined(c_plusplus) || defined(__cplusplus)
|
|
};
|
|
#endif /* c_plusplus || __cplusplus */
|
|
|
|
#endif /* __SEMAPHORE_H */
|