提交 6248f238 编写于 作者: K KO Myung-Hun 提交者: Michael Niedermayer

os2threads: Add pthread_once()

Signed-off-by: NMichael Niedermayer <michael@niedermayer.cc>
上级 b1a32429
......@@ -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 */
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册