ae2f_docs
Lock.h File Reference
#include "./Platform.h"
#include <pthread.h>
#include <errno.h>

Go to the source code of this file.

Macros

#define ae2f_addrel_t   int32_t
 Address element type.
#define __ae2f_osx_wait(uaddr, v)
 Wait on uaddr if its value equals v.
#define __ae2f_osx_wakesingle(uaddr)
 Wake one thread waiting on uaddr.
#define __ae2f_Wait   __ae2f_osx_wait
#define __ae2f_WakeSingle   __ae2f_osx_wakesingle

Detailed Description

Todo
Give a way for err-handling

Definition in file Lock.h.

Macro Definition Documentation

◆ __ae2f_osx_wait

#define __ae2f_osx_wait ( uaddr,
v )
Value:
({ int __ret = 0; \
if (pthread_mutex_lock(&__ae2f_osx_mutex) != 0) { \
errno = EAGAIN; \
__ret = -1; \
} else { \
while (*(uaddr) == (v) && __ret == 0) { \
if (pthread_cond_wait(&__ae2f_osx_cond, &__ae2f_osx_mutex) != 0) { \
errno = EAGAIN; \
__ret = -1; \
} \
} \
if (pthread_mutex_unlock(&__ae2f_osx_mutex) != 0) { \
errno = EAGAIN; \
__ret = -1; \
} \
} \
__ret; })

Wait on uaddr if its value equals v.

Parameters
uaddrPointer to address to wait on.
vValue to compare against.
Returns
0 on success, -1 on error with errno set.

Definition at line 125 of file Lock.h.

◆ __ae2f_osx_wakesingle

#define __ae2f_osx_wakesingle ( uaddr)
Value:
({ int __ret = 0; \
if (pthread_mutex_lock(&__ae2f_osx_mutex) != 0) { \
errno = EAGAIN; \
__ret = -1; \
} else { \
if (pthread_cond_signal(&__ae2f_osx_cond) != 0) { \
errno = EAGAIN; \
__ret = -1; \
} \
if (pthread_mutex_unlock(&__ae2f_osx_mutex) != 0) { \
errno = EAGAIN; \
__ret = -1; \
} \
} \
__ret; })

Wake one thread waiting on uaddr.

Parameters
uaddrPointer to address (unused, wakes condition variable).
Returns
0 on success, -1 on error with errno set.

Definition at line 149 of file Lock.h.

◆ __ae2f_Wait

#define __ae2f_Wait   __ae2f_osx_wait

Definition at line 166 of file Lock.h.

◆ __ae2f_WakeSingle

#define __ae2f_WakeSingle   __ae2f_osx_wakesingle

Definition at line 167 of file Lock.h.

◆ ae2f_addrel_t

#define ae2f_addrel_t   int32_t

Address element type.

Definition at line 111 of file Lock.h.