os2threads: Add pthread_once()

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
KO Myung-Hun 2015-11-12 12:31:51 +09:00 committed by Michael Niedermayer
parent b1a32429ef
commit 6248f23859
1 changed files with 27 additions and 0 deletions

View File

@ -32,6 +32,8 @@
#undef __STRICT_ANSI__ /* for _beginthread() */
#include <stdlib.h>
#include <sys/fmutex.h>
#include "libavutil/mem.h"
typedef TID pthread_t;
@ -47,6 +49,13 @@ typedef struct {
typedef void pthread_condattr_t;
typedef struct {
volatile int done;
_fmutex mtx;
} pthread_once_t;
#define PTHREAD_ONCE_INIT {0, _FMUTEX_INITIALIZER}
struct thread_arg {
void *(*start_routine)(void *);
void *arg;
@ -163,4 +172,22 @@ static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mute
return 0;
}
static av_always_inline int pthread_once(pthread_once_t *once_control, void (*init_routine)(void))
{
if (!once_control->done)
{
_fmutex_request(&once_control->mtx, 0);
if (!once_control->done)
{
init_routine();
once_control->done = 1;
}
_fmutex_release(&once_control->mtx);
}
return 0;
}
#endif /* AVCODEC_OS2PTHREADS_H */