Index: libcxx/include/__config =================================================================== --- libcxx/include/__config +++ libcxx/include/__config @@ -1129,6 +1129,7 @@ defined(__APPLE__) || \ defined(__CloudABI__) || \ defined(__sun__) || \ + defined(__MVS__) || \ (defined(__MINGW32__) && __has_include()) # define _LIBCPP_HAS_THREAD_API_PTHREAD # elif defined(__Fuchsia__) Index: libcxx/include/__threading_support =================================================================== --- libcxx/include/__threading_support +++ libcxx/include/__threading_support @@ -26,7 +26,7 @@ #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) # include # include -# ifdef __APPLE__ +# if defined(__APPLE__) || defined(__MVS__) # define _LIBCPP_NO_NATIVE_SEMAPHORES # endif # ifndef _LIBCPP_NO_NATIVE_SEMAPHORES @@ -82,10 +82,18 @@ #define _LIBCPP_EXEC_ONCE_INITIALIZER PTHREAD_ONCE_INIT // Thread id -typedef pthread_t __libcpp_thread_id; +#if defined(__MVS__) + typedef unsigned long long __libcpp_thread_id; +#else + typedef pthread_t __libcpp_thread_id; +#endif // Thread -#define _LIBCPP_NULL_THREAD 0U +#if defined(__MVS__) + #define _LIBCPP_NULL_THREAD (__libcpp_thread_t()) +#else + #define _LIBCPP_NULL_THREAD 0U +#endif typedef pthread_t __libcpp_thread_t; @@ -484,7 +492,7 @@ // Returns non-zero if the thread ids are equal, otherwise 0 bool __libcpp_thread_id_equal(__libcpp_thread_id t1, __libcpp_thread_id t2) { - return pthread_equal(t1, t2) != 0; + return t1 == t2; } // Returns non-zero if t1 < t2, otherwise 0 @@ -495,7 +503,7 @@ // Thread bool __libcpp_thread_isnull(const __libcpp_thread_t *__t) { - return *__t == 0; + return __libcpp_thread_get_id(__t) == 0; } int __libcpp_thread_create(__libcpp_thread_t *__t, void *(*__func)(void *), @@ -506,12 +514,17 @@ __libcpp_thread_id __libcpp_thread_get_current_id() { - return pthread_self(); + const __libcpp_thread_t thread = pthread_self(); + return __libcpp_thread_get_id(&thread); } __libcpp_thread_id __libcpp_thread_get_id(const __libcpp_thread_t *__t) { +#if defined(__MVS__) + return __t->__; +#else return *__t; +#endif } int __libcpp_thread_join(__libcpp_thread_t *__t)