winpthreads: pthread.h: group mutex-related declarations together Signed-off-by: Kirill Makurin <maiddaisuki@outlook.com> Signed-off-by: LIU Hao <lh_mouse@126.com>
diff --git a/mingw-w64-libraries/winpthreads/include/pthread.h b/mingw-w64-libraries/winpthreads/include/pthread.h index b3b1c96..1914e6d 100644 --- a/mingw-w64-libraries/winpthreads/include/pthread.h +++ b/mingw-w64-libraries/winpthreads/include/pthread.h
@@ -117,26 +117,12 @@ #define PTHREAD_DESTRUCTOR_ITERATIONS 256 #define PTHREAD_KEYS_MAX (1<<20) -#define PTHREAD_MUTEX_NORMAL 0 -#define PTHREAD_MUTEX_ERRORCHECK 1 -#define PTHREAD_MUTEX_RECURSIVE 2 -#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL - -#define PTHREAD_MUTEX_SHARED 1 -#define PTHREAD_MUTEX_PRIVATE 0 - #define PTHREAD_PRIO_NONE 0 #define PTHREAD_PRIO_INHERIT 8 #define PTHREAD_PRIO_PROTECT 16 #define PTHREAD_PROCESS_SHARED 1 #define PTHREAD_PROCESS_PRIVATE 0 -#define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL -#define PTHREAD_MUTEX_TIMED_NP PTHREAD_MUTEX_FAST_NP -#define PTHREAD_MUTEX_ADAPTIVE_NP PTHREAD_MUTEX_FAST_NP -#define PTHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK -#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE - WINPTHREAD_API void * pthread_timechange_handler_np(void * dummy); WINPTHREAD_API int pthread_delay32_np (const struct _timespec32 *interval); WINPTHREAD_API int pthread_delay64_np (const struct _timespec64 *interval); @@ -160,14 +146,11 @@ #define pthread_atfork(F1,F2,F3) 0 /* unsupported stuff: */ -#define pthread_mutex_getprioceiling(M, P) ENOTSUP -#define pthread_mutex_setprioceiling(M, P) ENOTSUP #define pthread_getcpuclockid(T, C) ENOTSUP #define pthread_attr_getguardsize(A, S) ENOTSUP #define pthread_attr_setguardsize(A, S) ENOTSUP typedef long pthread_once_t; -typedef unsigned pthread_mutexattr_t; typedef unsigned pthread_key_t; typedef void *pthread_barrierattr_t; typedef int pthread_condattr_t; @@ -224,22 +207,79 @@ WINPTHREAD_API int pthread_attr_setschedpolicy (pthread_attr_t *attr, int pol); WINPTHREAD_API int pthread_attr_getschedpolicy (const pthread_attr_t *attr, int *pol); +/** + * Mutex (pthread_mutex_t) declarations, definitons and functions. + */ + +#define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_NORMAL 0 +#define PTHREAD_MUTEX_ERRORCHECK 1 +#define PTHREAD_MUTEX_RECURSIVE 2 + +/** + * Implementation-defined mutex types. + */ +#define PTHREAD_MUTEX_ADAPTIVE_NP PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_TIMED_NP PTHREAD_MUTEX_NORMAL +#define PTHREAD_MUTEX_ERRORCHECK_NP PTHREAD_MUTEX_ERRORCHECK +#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE + +/** + * Not POSIX; pthread-win32 compatibility? + */ +#define PTHREAD_MUTEX_PRIVATE 0 +#define PTHREAD_MUTEX_SHARED 1 + +typedef unsigned pthread_mutexattr_t; + +WINPTHREAD_API int pthread_mutexattr_init(pthread_mutexattr_t *); +WINPTHREAD_API int pthread_mutexattr_destroy(pthread_mutexattr_t *); +WINPTHREAD_API int pthread_mutexattr_settype(pthread_mutexattr_t *, int); +WINPTHREAD_API int pthread_mutexattr_gettype(const pthread_mutexattr_t *, int *); +WINPTHREAD_API int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int); +WINPTHREAD_API int pthread_mutexattr_getpshared(const pthread_mutexattr_t *, int *); +WINPTHREAD_API int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int); +WINPTHREAD_API int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *, int *); +WINPTHREAD_API int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int); +WINPTHREAD_API int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *, int *); + +typedef intptr_t pthread_mutex_t; + +#define PTHREAD_MUTEX_INITIALIZER PTHREAD_DEFAULT_MUTEX_INITIALIZER +#define PTHREAD_DEFAULT_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER +#define PTHREAD_NORMAL_MUTEX_INITIALIZER (pthread_mutex_t)-1 +#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER (pthread_mutex_t)-2 +#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER (pthread_mutex_t)-3 + +WINPTHREAD_API int pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *); +WINPTHREAD_API int pthread_mutex_destroy(pthread_mutex_t *); +WINPTHREAD_API int pthread_mutex_lock(pthread_mutex_t *); +WINPTHREAD_API int pthread_mutex_trylock(pthread_mutex_t *); +WINPTHREAD_API int pthread_mutex_unlock(pthread_mutex_t *); +WINPTHREAD_API int pthread_mutex_timedlock32(pthread_mutex_t *, const struct _timespec32 *); +WINPTHREAD_API int pthread_mutex_timedlock64(pthread_mutex_t *, const struct _timespec64 *); +WINPTHREAD_MUTEX_DECL int pthread_mutex_timedlock(pthread_mutex_t *_M, const struct timespec *_T) +{ +#if WINPTHREADS_TIME_BITS == 32 + return pthread_mutex_timedlock32 (_M, (const struct _timespec32 *) _T); +#else + return pthread_mutex_timedlock64 (_M, (const struct _timespec64 *) _T); +#endif +} + +/** + * Not implemented. + */ +#define pthread_mutex_setprioceiling(M, P) ENOTSUP +#define pthread_mutex_getprioceiling(M, P) ENOTSUP + /* synchronization objects */ typedef intptr_t pthread_spinlock_t; -typedef intptr_t pthread_mutex_t; typedef intptr_t pthread_cond_t; typedef intptr_t pthread_rwlock_t; typedef void *pthread_barrier_t; -#define PTHREAD_MUTEX_NORMAL 0 -#define PTHREAD_MUTEX_ERRORCHECK 1 -#define PTHREAD_MUTEX_RECURSIVE 2 - -#define PTHREAD_MUTEX_INITIALIZER (pthread_mutex_t)-1 -#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER (pthread_mutex_t)-3 -#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER (pthread_mutex_t)-2 -#define PTHREAD_NORMAL_MUTEX_INITIALIZER (pthread_mutex_t)-1 -#define PTHREAD_DEFAULT_MUTEX_INITIALIZER PTHREAD_NORMAL_MUTEX_INITIALIZER #define PTHREAD_COND_INITIALIZER (pthread_cond_t)-1 #define PTHREAD_RWLOCK_INITIALIZER (pthread_rwlock_t)-1 #define PTHREAD_SPINLOCK_INITIALIZER (pthread_spinlock_t)-1 @@ -327,22 +367,6 @@ #endif } -WINPTHREAD_API int pthread_mutex_lock(pthread_mutex_t *m); -WINPTHREAD_API int pthread_mutex_timedlock32(pthread_mutex_t *m, const struct _timespec32 *ts); -WINPTHREAD_API int pthread_mutex_timedlock64(pthread_mutex_t *m, const struct _timespec64 *ts); -WINPTHREAD_MUTEX_DECL int pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec *ts) -{ -#if WINPTHREADS_TIME_BITS == 32 - return pthread_mutex_timedlock32 (m, (const struct _timespec32 *) ts); -#else - return pthread_mutex_timedlock64 (m, (const struct _timespec64 *) ts); -#endif -} -WINPTHREAD_API int pthread_mutex_unlock(pthread_mutex_t *m); -WINPTHREAD_API int pthread_mutex_trylock(pthread_mutex_t *m); -WINPTHREAD_API int pthread_mutex_init(pthread_mutex_t *m, const pthread_mutexattr_t *a); -WINPTHREAD_API int pthread_mutex_destroy(pthread_mutex_t *m); - WINPTHREAD_API int pthread_barrier_destroy(pthread_barrier_t *b); WINPTHREAD_API int pthread_barrier_init(pthread_barrier_t *b, const void *attr, unsigned int count); WINPTHREAD_API int pthread_barrier_wait(pthread_barrier_t *b); @@ -369,16 +393,6 @@ WINPTHREAD_API int pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *size); WINPTHREAD_API int pthread_attr_setstacksize(pthread_attr_t *attr, size_t size); -WINPTHREAD_API int pthread_mutexattr_init(pthread_mutexattr_t *a); -WINPTHREAD_API int pthread_mutexattr_destroy(pthread_mutexattr_t *a); -WINPTHREAD_API int pthread_mutexattr_gettype(const pthread_mutexattr_t *a, int *type); -WINPTHREAD_API int pthread_mutexattr_settype(pthread_mutexattr_t *a, int type); -WINPTHREAD_API int pthread_mutexattr_getpshared(const pthread_mutexattr_t *a, int *type); -WINPTHREAD_API int pthread_mutexattr_setpshared(pthread_mutexattr_t * a, int type); -WINPTHREAD_API int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *a, int *type); -WINPTHREAD_API int pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int type); -WINPTHREAD_API int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *a, int * prio); -WINPTHREAD_API int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *a, int prio); WINPTHREAD_API int pthread_getconcurrency(void); WINPTHREAD_API int pthread_setconcurrency(int new_level);