3 dnl Copyright (C) 2005-2024 Free Software Foundation, Inc.
4 dnl This file is free software; the Free Software Foundation
5 dnl gives unlimited permission to copy and/or distribute it,
6 dnl with or without modifications, as long as this notice is preserved.
12 dnl The general structure of the multithreading modules in gnulib is that we
13 dnl have three set of modules:
16 dnl pthread, which combines
28 dnl threads, which combines
35 dnl * Gnulib API, with an implementation that can be chosen at configure
36 dnl time through the option --enable-threads=...
43 dnl They are independent, except for the fact that
44 dnl - the implementation of the ISO C API may use the POSIX (or some other
45 dnl platform dependent) API,
46 dnl - the implementation of the Gnulib API may use the POSIX or ISO C or
47 dnl some other platform dependent API, depending on the --enable-threads
50 dnl This file contains macros for all of these APIs!
52 dnl ============================================================================
53 dnl Macros for all thread APIs
55 AC_DEFUN([gl_ANYTHREADLIB_EARLY],
57 AC_REQUIRE([AC_CANONICAL_HOST])
58 if test -z "$gl_anythreadlib_early_done"; then
61 # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
62 # groks <pthread.h>. cc also understands the flag -pthread, but
63 # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
64 # 2. putting a flag into CPPFLAGS that has an effect on the linker
65 # causes the AC_LINK_IFELSE test below to succeed unexpectedly,
66 # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
67 CPPFLAGS="$CPPFLAGS -D_REENTRANT"
70 # Some systems optimize for single-threaded programs by default, and
71 # need special flags to disable these optimizations. For example, the
72 # definition of 'errno' in <errno.h>.
74 aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
75 solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
77 gl_anythreadlib_early_done=done
81 dnl Checks whether the compiler and linker support weak declarations of symbols.
83 AC_DEFUN([gl_WEAK_SYMBOLS],
85 AC_REQUIRE([AC_CANONICAL_HOST])
86 AC_CACHE_CHECK([whether imported symbols can be declared weak],
89 cygwin* | mingw* | windows*)
90 dnl On Cygwin 3.2.0 with gcc 10.2, and likewise on mingw 10.0.0 with
91 dnl gcc 11.3, the test below would succeed, but programs that use
92 dnl pthread_in_use() with weak symbol references crash miserably at
94 gl_cv_have_weak="guessing no"
98 dnl First, test whether the compiler accepts it syntactically.
101 [[extern void xyzzy ();
102 #pragma weak xyzzy]],
104 [gl_cv_have_weak=maybe])
105 if test $gl_cv_have_weak = maybe; then
106 dnl Second, test whether it actually works. On Cygwin 1.7.2, with
107 dnl gcc 4.3, symbols declared weak always evaluate to the address 0.
114 return (fputs == NULL);
116 [gl_cv_have_weak=yes],
117 [gl_cv_have_weak=no],
118 [dnl When cross-compiling, assume that only ELF platforms support
120 AC_EGREP_CPP([Extensible Linking Format],
122 Extensible Linking Format
125 [gl_cv_have_weak="guessing yes"],
126 [gl_cv_have_weak="guessing no"])
131 dnl But when linking statically, weak symbols don't work.
133 *" -static "*) gl_cv_have_weak=no ;;
135 dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak
136 dnl symbol and linking against a shared library that has a dependency on
137 dnl the shared library that defines the symbol.
138 case "$gl_cv_have_weak" in
141 freebsd* | dragonfly* | midnightbsd*)
143 $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1
144 cat <<EOF > conftest2.c
146 #pragma weak pthread_mutexattr_gettype
149 return (pthread_mutexattr_gettype != NULL);
152 $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \
153 || gl_cv_have_weak=no
154 rm -f conftest1.c libempty.so conftest2.c conftest
160 case "$gl_cv_have_weak" in
162 AC_DEFINE([HAVE_WEAK_SYMBOLS], [1],
163 [Define to 1 if the compiler and linker support weak declarations of symbols.])
168 dnl ============================================================================
169 dnl Macros for the POSIX API
173 dnl Tests for the libraries needs for using the POSIX threads API.
174 dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile.
175 dnl Sets the variable LIBPMULTITHREAD, for programs that really need
176 dnl multithread functionality. The difference between LIBPTHREAD and
177 dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically
178 dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not.
179 dnl Sets the variable SCHED_YIELD_LIB to the linker options needed to use the
180 dnl sched_yield() function.
181 dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
182 dnl multithread-safe programs.
183 dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX
184 dnl threads API is available.
186 dnl The guts of gl_PTHREADLIB. Needs to be expanded only once.
188 AC_DEFUN([gl_PTHREADLIB_BODY],
190 AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
191 if test -z "$gl_pthreadlib_body_done"; then
195 # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
196 # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY.
197 AC_CHECK_HEADER([pthread.h],
198 [gl_have_pthread_h=yes], [gl_have_pthread_h=no])
199 if test "$gl_have_pthread_h" = yes; then
200 # Other possible tests:
201 # -lpthreads (FSU threads, PCthreads)
203 # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
204 # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
205 # the second one only in libpthread, and lock.c needs it.
207 # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04
208 # needs -pthread for some reason. See:
209 # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html
211 for gl_pthread in '' '-pthread'; do
212 LIBS="$LIBS $gl_pthread"
215 [[#include <pthread.h>
217 pthread_mutexattr_t ma;
219 [[pthread_mutex_lock (&m);
220 pthread_mutexattr_init (&ma);]])],
222 LIBPTHREAD=$gl_pthread
223 LIBPMULTITHREAD=$gl_pthread])
225 test $gl_pthread_api = yes && break
227 echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD
228 echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD
230 gl_pthread_in_glibc=no
231 # On Linux with glibc >= 2.34, libc contains the fully functional
235 AC_EGREP_CPP([Lucky user],
236 [#include <features.h>
237 #ifdef __GNU_LIBRARY__
238 #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2)
243 [gl_pthread_in_glibc=yes],
247 echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD
249 # Test for libpthread by looking for pthread_kill. (Not pthread_self,
250 # since it is defined as a macro on OSF/1.)
251 if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then
252 # The program links fine without libpthread. But it may actually
253 # need to link with libpthread in order to create multiple threads.
254 AC_CHECK_LIB([pthread], [pthread_kill],
255 [if test $gl_pthread_in_glibc = yes; then
258 LIBPMULTITHREAD=-lpthread
259 # On Solaris and HP-UX, most pthread functions exist also in libc.
260 # Therefore pthread_in_use() needs to actually try to create a
261 # thread: pthread_create from libc will fail, whereas
262 # pthread_create will actually create a thread.
263 # On Solaris 10 or newer, this test is no longer needed, because
264 # libc contains the fully functional pthread functions.
267 solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*)
269 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
270 [Define if the pthread_in_use() detection is hard.])
274 [dnl This is needed on FreeBSD 5.2.1.
275 AC_CHECK_LIB([thr], [pthread_kill],
276 [if test $gl_pthread_in_glibc = yes; then
279 LIBPMULTITHREAD=-lthr
283 elif test $gl_pthread_api != yes; then
284 # Some library is needed. Try libpthread and libc_r.
285 AC_CHECK_LIB([pthread], [pthread_kill],
288 LIBPMULTITHREAD=-lpthread])
289 if test $gl_pthread_api != yes; then
291 AC_CHECK_LIB([c_r], [pthread_kill],
294 LIBPMULTITHREAD=-lc_r])
297 echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD
299 AC_MSG_CHECKING([whether POSIX threads API is available])
300 AC_MSG_RESULT([$gl_pthread_api])
301 AC_SUBST([LIBPTHREAD])
302 AC_SUBST([LIBPMULTITHREAD])
303 if test $gl_pthread_api = yes; then
304 AC_DEFINE([HAVE_PTHREAD_API], [1],
305 [Define if you have the <pthread.h> header and the POSIX threads API.])
308 dnl On some systems, sched_yield is in librt, rather than in libpthread.
311 [[#include <sched.h>]],
312 [[sched_yield ();]])],
315 [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc.
316 AC_CHECK_LIB([rt], [sched_yield], [SCHED_YIELD_LIB=-lrt],
317 [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt.
318 AC_CHECK_LIB([posix4], [sched_yield], [SCHED_YIELD_LIB=-lposix4])])
320 AC_SUBST([SCHED_YIELD_LIB])
321 dnl For backward compatibility.
322 LIB_SCHED_YIELD="$SCHED_YIELD_LIB"
323 AC_SUBST([LIB_SCHED_YIELD])
325 gl_pthreadlib_body_done=done
329 AC_DEFUN([gl_PTHREADLIB],
331 AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
335 dnl ============================================================================
336 dnl Macros for the ISO C API
340 dnl Tests for the libraries needs for using the ISO C threads API.
341 dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile.
342 dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
343 dnl multithread-safe programs.
344 dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads
345 dnl API is available.
347 dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once.
349 AC_DEFUN([gl_STDTHREADLIB_BODY],
351 AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
352 AC_REQUIRE([AC_CANONICAL_HOST])
353 if test -z "$gl_stdthreadlib_body_done"; then
354 AC_CHECK_HEADERS_ONCE([threads.h])
362 if test $ac_cv_header_threads_h = yes; then
363 dnl glibc >= 2.29 has thrd_create in libpthread.
364 dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends
365 dnl on libpthread (for the symbol 'pthread_mutexattr_gettype').
366 dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in
368 gl_CHECK_FUNCS_ANDROID([thrd_create], [[#include <threads.h>]])
369 if test $ac_cv_func_thrd_create = yes; then
372 AC_CHECK_LIB([stdthreads], [thrd_create], [
373 LIBSTDTHREAD='-lstdthreads -lpthread'
375 dnl Guess that thrd_create is in libpthread.
376 LIBSTDTHREAD="$LIBPMULTITHREAD"
380 dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c.
381 LIBSTDTHREAD="$LIBPMULTITHREAD $SCHED_YIELD_LIB"
385 AC_SUBST([LIBSTDTHREAD])
387 AC_MSG_CHECKING([whether ISO C threads API is available])
388 AC_MSG_RESULT([$ac_cv_header_threads_h])
389 gl_stdthreadlib_body_done=done
393 AC_DEFUN([gl_STDTHREADLIB],
395 AC_REQUIRE([gl_ANYTHREADLIB_EARLY])
399 dnl ============================================================================
400 dnl Macros for the Gnulib API
404 dnl Tests for a multithreading library to be used.
405 dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO
406 dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the
407 dnl default is 'no', otherwise it is system dependent. In both cases, the user
408 dnl can change the choice through the options --enable-threads=choice or
409 dnl --disable-threads.
410 dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS,
411 dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS.
412 dnl The choice --enable-threads=isoc+posix is available only on platforms that
413 dnl have both the ISO C and the POSIX threads APIs. It has the effect of using
414 dnl the ISO C API for most things and the POSIX API only for creating and
415 dnl controlling threads (because there is no equivalent to pthread_atfork in
417 dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
418 dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
420 dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
421 dnl programs that really need multithread functionality. The difference
422 dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
423 dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not.
424 dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
425 dnl multithread-safe programs.
426 dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the
427 dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the
428 dnl same value. Only system libraries are needed.
430 AC_DEFUN([gl_THREADLIB_EARLY],
432 AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
435 dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once.
437 AC_DEFUN([gl_THREADLIB_EARLY_BODY],
439 dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
440 dnl influences the result of the autoconf tests that test for *_unlocked
441 dnl declarations, on AIX 5 at least. Therefore it must come early.
442 AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
443 AC_BEFORE([$0], [gl_ARGP])dnl
445 AC_REQUIRE([AC_CANONICAL_HOST])
446 dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
447 AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
448 dnl Check for multithreading.
449 m4_ifdef([gl_THREADLIB_DEFAULT_NO],
450 [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])],
451 [m4_divert_text([DEFAULTS], [gl_use_threads_default=])])
452 dnl gl_use_winpthreads_default defaults to 'no', because in mingw 10, like
453 dnl in mingw 5, the use of libwinpthread still makes test-pthread-tss crash.
454 m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=no])
455 AC_ARG_ENABLE([threads],
456 AS_HELP_STRING([[--enable-threads={isoc|posix|isoc+posix|windows}]], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [
457 AS_HELP_STRING([[--disable-threads]], [build without multithread safety])]),
458 [gl_use_threads=$enableval],
459 [if test -n "$gl_use_threads_default"; then
460 gl_use_threads="$gl_use_threads_default"
464 dnl Disable multithreading by default on OSF/1, because it interferes
465 dnl with fork()/exec(): When msgexec is linked with -lpthread, its
466 dnl child process gets an endless segmentation fault inside execvp().
467 osf*) gl_use_threads=no ;;
468 dnl Disable multithreading by default on Cygwin 1.5.x, because it has
469 dnl bugs that lead to endless loops or crashes. See
470 dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>.
473 1.[0-5].*) gl_use_threads=no ;;
474 *) gl_use_threads=yes ;;
477 dnl Obey gl_AVOID_WINPTHREAD on mingw.
479 case "$gl_use_winpthreads_default" in
480 yes) gl_use_threads=posix ;;
481 no) gl_use_threads=windows ;;
482 *) gl_use_threads=yes ;;
485 *) gl_use_threads=yes ;;
490 if test "$gl_use_threads" = yes \
491 || test "$gl_use_threads" = isoc \
492 || test "$gl_use_threads" = posix \
493 || test "$gl_use_threads" = isoc+posix; then
494 # For using <threads.h> or <pthread.h>:
495 gl_ANYTHREADLIB_EARLY
499 dnl The guts of gl_THREADLIB. Needs to be expanded only once.
501 AC_DEFUN([gl_THREADLIB_BODY],
503 AC_REQUIRE([gl_THREADLIB_EARLY_BODY])
509 if test "$gl_use_threads" != no; then
510 dnl Check whether the compiler and linker support weak declarations.
512 if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
513 dnl If we use weak symbols to implement pthread_in_use / pth_in_use /
514 dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create
515 dnl facility is in use.
516 AC_CHECK_HEADERS_ONCE([threads.h])
519 if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then
520 AC_CHECK_HEADERS_ONCE([threads.h])
521 gl_have_isoc_threads="$ac_cv_header_threads_h"
523 if test "$gl_use_threads" = yes \
524 || test "$gl_use_threads" = posix \
525 || test "$gl_use_threads" = isoc+posix; then
527 LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD
528 LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD
529 if test $gl_pthread_api = yes; then
530 if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then
531 gl_threads_api='isoc+posix'
532 AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1],
533 [Define if the combination of the ISO C and POSIX multithreading APIs can be used.])
534 LIBTHREAD= LTLIBTHREAD=
537 AC_DEFINE([USE_POSIX_THREADS], [1],
538 [Define if the POSIX multithreading library can be used.])
539 if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then
540 AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1],
541 [Define if references to the POSIX multithreading library are satisfied by libc.])
543 if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then
544 AC_DEFINE([USE_POSIX_THREADS_WEAK], [1],
545 [Define if references to the POSIX multithreading library should be made weak.])
546 LIBTHREAD= LTLIBTHREAD=
549 freebsd* | dragonfly* | midnightbsd*)
550 if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then
551 dnl If weak symbols can't tell whether pthread_create(), pthread_key_create()
552 dnl etc. will succeed, we need a runtime test.
553 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1],
554 [Define if the pthread_in_use() detection is hard.])
563 if test $gl_threads_api = none; then
564 if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then
566 LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD
567 LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD
569 AC_DEFINE([USE_ISOC_THREADS], [1],
570 [Define if the ISO C multithreading library can be used.])
573 if test $gl_threads_api = none; then
574 case "$gl_use_threads" in
575 yes | windows | win32) # The 'win32' is for backward compatibility.
576 if { case "$host_os" in
577 mingw* | windows*) true;;
581 gl_threads_api=windows
582 AC_DEFINE([USE_WINDOWS_THREADS], [1],
583 [Define if the native Windows multithreading API can be used.])
589 dnl "$gl_use_threads" is "no".
590 AC_DEFINE([AVOID_ANY_THREADS], [1],
591 [Define if no multithread safety and no multithreading is desired.])
593 AC_MSG_CHECKING([for multithread API to use])
594 AC_MSG_RESULT([$gl_threads_api])
595 AC_SUBST([LIBTHREAD])
596 AC_SUBST([LTLIBTHREAD])
597 AC_SUBST([LIBMULTITHREAD])
598 AC_SUBST([LTLIBMULTITHREAD])
601 AC_DEFUN([gl_THREADLIB],
603 AC_REQUIRE([gl_THREADLIB_EARLY])
604 AC_REQUIRE([gl_THREADLIB_BODY])
608 dnl gl_DISABLE_THREADS
609 dnl ------------------
610 dnl Sets the gl_THREADLIB default so that threads are not used by default.
611 dnl The user can still override it at installation time, by using the
612 dnl configure option '--enable-threads'.
614 AC_DEFUN([gl_DISABLE_THREADS], [
615 m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no])
619 dnl gl_AVOID_WINPTHREAD
620 dnl -------------------
621 dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the
622 dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided.
623 dnl The user can still override it at installation time, by using the
624 dnl configure option '--enable-threads=posix'.
625 dnl As of 2023, this is now the default.
627 AC_DEFUN([gl_AVOID_WINPTHREAD], [
628 m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no])
632 dnl ============================================================================
635 dnl Survey of platforms:
637 dnl Platform Available Compiler Supports test-lock
638 dnl flavours option weak result
639 dnl --------------- --------- --------- -------- ---------
640 dnl Linux 2.4/glibc posix -lpthread Y OK
642 dnl Linux/glibc 2.34 posix Y OK
644 dnl GNU Hurd/glibc posix -lpthread Y OK
646 dnl Ubuntu 14.04 posix -pthread Y OK
648 dnl FreeBSD 5.3 posix -lc_r Y
650 dnl posix -lpthread ? Y
653 dnl FreeBSD 5.2 posix -lc_r Y
657 dnl FreeBSD 4.0,4.10 posix -lc_r Y OK
661 dnl OpenBSD 3.4 posix -lpthread Y OK
663 dnl Mac OS X 10.[123] posix -lpthread Y OK
665 dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK
667 dnl HP-UX 11 posix -lpthread N (cc) OK
670 dnl IRIX 6.5 posix -lpthread Y 0.5
672 dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK
674 dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK
675 dnl -lpthread (gcc) Y
677 dnl Cygwin posix -lpthread Y OK
679 dnl Mingw windows N OK
683 dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
685 dnl OK if all three tests terminate OK,
686 dnl 0.5 if the first test terminates OK but the second one loops endlessly,
687 dnl 0.0 if the first test already loops endlessly.