diff options
Diffstat (limited to 'README')
| -rw-r--r-- | README | 838 | 
1 files changed, 419 insertions, 419 deletions
| @@ -1,419 +1,419 @@ -PTHREADS-WIN32
 -==============
 -
 -Pthreads-win32 is free software, distributed under the GNU Lesser
 -General Public License (LGPL). See the file 'COPYING.LIB' for terms
 -and conditions. Also see the file 'COPYING' for information
 -specific to pthreads-win32, copyrights and the LGPL.
 -
 -
 -What is it?
 ------------
 -
 -Pthreads-win32 is an Open Source Software implementation of the
 -Threads component of the POSIX 1003.1c 1995 Standard for Microsoft's
 -Win32 environment. Some functions from POSIX 1003.1b are also
 -supported including semaphores. Other related functions include
 -the set of read-write lock functions. The library also supports
 -some of the functionality of the Open Group's Single Unix
 -specification, version 2, namely mutex types.
 -
 -See the file "ANNOUNCE" for more information including standards
 -conformance details and list of supported routines.
 -
 -
 -Which of the several dll versions to use?
 ------------------------------------------
 -or,
 ----
 -What are all these pthread*.dll and pthread*.lib files?
 --------------------------------------------------------
 -
 -Simply, you only use one of them, but you need to choose carefully.
 -
 -The most important choice you need to make is whether to use a
 -version that uses exceptions internally, or not (there are versions
 -of the library that use exceptions as part of the thread
 -cancelation and exit implementation, and one that uses
 -setjmp/longjmp instead).
 -
 -There is some contension amongst POSIX threads experts as
 -to how POSIX threads cancelation and exit should work
 -with languages that include exceptions and handlers, e.g.
 -C++ and even C (Microsoft's Structured Exceptions).
 -
 -The issue is: should cancelation of a thread in, say,
 -a C++ application cause object destructors and C++ exception
 -handlers to be invoked as the stack unwinds during thread
 -exit, or not?
 -
 -There seems to be more opinion in favour of using the
 -standard C version of the library (no EH) with C++ applications
 -since this appears to be the assumption commercial pthreads
 -implementations make. Therefore, if you use an EH version
 -of pthreads-win32 then you may be under the illusion that
 -your application will be portable, when in fact it is likely to
 -behave very differently linked with other pthreads libraries.
 -
 -Now you may be asking: why have you kept the EH versions of
 -the library?
 -
 -There are a couple of reasons:
 -- there is division amongst the experts and so the code may
 -  be needed in the future. (Yes, it's in the repository and we
 -  can get it out anytime in the future, but ...)
 -- pthreads-win32 is one of the few implementations, and possibly
 -  the only freely available one, that has EH versions. It may be
 -  useful to people who want to play with or study application
 -  behaviour under these conditions.
 -
 -
 -Library naming
 ---------------
 -
 -Because the library is being built using various exception
 -handling schemes and compilers - and because the library
 -may not work reliably if these are mixed in an application,
 -each different version of the library has it's own name.
 -
 -Note 1: the incompatibility is really between EH implementations
 -of the different compilers. It should be possible to use the
 -standard C version from either compiler with C++ applications
 -built with a different compiler. If you use an EH version of
 -the library, then you must use the same compiler for the
 -application. This is another complication and dependency that
 -can be avoided by using only the standard C library version.
 -
 -Note 2: if you use a standard C pthread*.dll with a C++
 -application, then any functions that you define that are
 -intended to be called via pthread_cleanup_push() must be
 -__cdecl.
 -
 -Note 3: the intention is to also name either the VC or GC
 -version (it should be arbitrary) as pthread.dll, including
 -pthread.lib and libpthread.a as appropriate.
 -
 -In general:
 -	pthread[VG]{SE,CE,C}.dll
 -	pthread[VG]{SE,CE,C}.lib
 -
 -where:
 -	[VG] indicates the compiler
 -	V	- MS VC
 -	G	- GNU C
 -
 -	{SE,CE,C} indicates the exception handling scheme
 -	SE	- Structured EH
 -	CE	- C++ EH
 -	C       - no exceptions - uses setjmp/longjmp
 -
 -For example:
 -	pthreadVSE.dll	(MSVC/SEH)
 -	pthreadGCE.dll	(GNUC/C++ EH)
 -	pthreadGC.dll   (GNUC/not dependent on exceptions)
 -
 -The GNU library archive file names have changed to:
 -
 -	libpthreadGCE.a
 -	libpthreadGC.a
 -
 -
 -Other name changes
 -------------------
 -
 -All snapshots prior to and including snapshot 2000-08-13
 -used "_pthread_" as the prefix to library internal
 -functions, and "_PTHREAD_" to many library internal
 -macros. These have now been changed to "ptw32_" and "PTW32_"
 -respectively so as to not conflict with the ANSI standard's
 -reservation of identifiers beginning with "_" and "__" for
 -use by compiler implementations only.
 -
 -If you have written any applications and you are linking
 -statically with the pthreads-win32 library then you may have
 -included a call to _pthread_processInitialize. You will
 -now have to change that to ptw32_processInitialize.
 -
 -
 -A note on Cleanup code default style
 -------------------------------------
 -
 -Previously, if not defined, the cleanup style was determined automatically
 -from the compiler used, and one of the following was defined accordingly:
 -
 -	__CLEANUP_SEH	MSVC only
 -	__CLEANUP_CXX	C++, including MSVC++, GNU G++
 -	__CLEANUP_C		C, including GNU GCC, not MSVC
 -
 -These defines determine the style of cleanup (see pthread.h) and,
 -most importantly, the way that cancelation and thread exit (via
 -pthread_exit) is performed (see the routine ptw32_throw() in private.c).
 -
 -In short, the exceptions versions of the library throw an exception
 -when a thread is canceled or exits (via pthread_exit()), which is
 -caught by a handler in the thread startup routine, so that the
 -the correct stack unwinding occurs regardless of where the thread
 -is when it's canceled or exits via pthread_exit().
 -
 -In this snapshot, unless the build explicitly defines (e.g. via a
 -compiler option) __CLEANUP_SEH, __CLEANUP_CXX, or __CLEANUP_C, then
 -the build NOW always defaults to __CLEANUP_C style cleanup. This style
 -uses setjmp/longjmp in the cancelation and pthread_exit implementations,
 -and therefore won't do stack unwinding even when linked to applications
 -that have it (e.g. C++ apps). This is for consistency with most/all
 -commercial Unix POSIX threads implementations.
 -
 -Although it was not clearly documented before, it is still necessary to
 -build your application using the same __CLEANUP_* define as was
 -used for the version of the library that you link with, so that the
 -correct parts of pthread.h are included. That is, the possible
 -defines require the following library versions:
 -
 -	__CLEANUP_SEH	pthreadVSE.dll
 -	__CLEANUP_CXX	pthreadVCE.dll or pthreadGCE.dll
 -	__CLEANUP_C		pthreadVC.dll or pthreadGC.dll
 -
 -THE POINT OF ALL THIS IS: if you have not been defining one of these
 -explicitly, then the defaults as described at the top of this
 -section were being used.
 -
 -THIS NOW CHANGES, as has been explained above, but to try to make this
 -clearer here's an example:
 -
 -If you were building your application with MSVC++ i.e. using C++
 -exceptions (rather than SEH) and not explicitly defining one of
 -__CLEANUP_*, then __CLEANUP_C++ was defined for you in pthread.h.
 -You should have been linking with pthreadVCE.dll, which does
 -stack unwinding.
 -
 -If you now build your application as you had before, pthread.h will now
 -set __CLEANUP_C as the default style, and you will need to link
 -with pthreadVC.dll. Stack unwinding will now NOT occur when a thread
 -is canceled, or the thread calls pthread_exit().
 -
 -Your application will now most likely behave differently to previous
 -versions, and in non-obvious ways. Most likely is that locally
 -instantiated objects may not be destroyed or cleaned up after a thread
 -is canceled.
 -
 -If you want the same behaviour as before, then you must now define
 -__CLEANUP_C++ explicitly using a compiler option and link with
 -pthreadVCE.dll as you did before.
 -
 -
 -WHY ARE WE MAKING THE DEFAULT STYLE LESS EXCEPTION-FRIENDLY?
 -Because no commercial Unix POSIX threads implementation allows you to
 -choose to have stack unwinding. Therefore, providing it in pthread-win32
 -as a default is dangerous. We still provide the choice but unless
 -you consciously choose to do otherwise, your pthreads applications will
 -now run or crash in similar ways irrespective of the threads platform
 -you use. Or at least this is the hope.
 -
 -
 -
 -Building under VC++ using C++ EH, Structured EH, or just C
 -----------------------------------------------------------
 -
 -From the source directory run one of the following:
 -
 -nmake clean VCE	(builds the VC++ C++ EH version pthreadVCE.dll)
 -
 -or:
 -
 -nmake clean VSE	(builds the VC++ structured EH version pthreadVSE.dll)
 -
 -or:
 -
 -nmake clean VC	(builds the VC setjmp/longjmp version of pthreadVC.dll)
 -
 -You can run the testsuite by changing to the "tests" directory and
 -running the target corresponding to the DLL version you built:
 -
 -nmake clean VCE
 -
 -or:
 -
 -nmake clean VSE
 -
 -or:
 -
 -nmake clean VC
 -
 -or:
 -
 -nmake clean VCX	(tests the VC version of the library with C++ (EH)
 -			 applications)
 -
 -
 -Building under Mingw32
 -----------------------
 -
 -The dll can be built with Mingw32 gcc-2.95.2-1 after you've
 -made the changes to Mingw32 desribed in Question 6 of the FAQ.
 -
 -From the source directory, run
 -
 -make clean GCE
 -
 -or:
 -
 -make clean GC
 -
 -You can run the testsuite by changing to the "tests" directory and
 -running
 -
 -make clean GCE
 -
 -or:
 -
 -make clean GC
 -
 -or:
 -
 -make clean GCX	(tests the GC version of the library with C++ (EH)
 -			 applications)
 -
 -
 -Building the library under Cygwin
 ----------------------------------
 -
 -Not tested by me although I think some people have done this.
 -Not sure how successfully though.
 -
 -Cygwin is implementing it's own POSIX threads routines and these
 -will be the ones to use if you develop using Cygwin.
 -
 -
 -Ready to run binaries
 ----------------------
 -
 -For convenience, the following ready-to-run files can be downloaded
 -from the FTP site (see under "Availability" below):
 -
 -	pthread.h
 -	semaphore.h
 -	sched.h
 -	pthread.def
 -	pthreadVCE.dll	- built with MSVC++ compiler using C++ EH
 -	pthreadVCE.lib
 -	pthreadVC.dll	- built with MSVC compiler using C setjmp/longjmp
 -	pthreadVC.lib
 -	pthreadVSE.dll	- built with MSVC compiler using SEH
 -	pthreadVSE.lib
 -	pthreadGCE.dll	- built with Mingw32 G++
 -	pthreadGCE.a	- derived from pthreadGCE.dll
 -	pthreadGC.dll	- built with Mingw32 GCC
 -	pthreadGC.a	- derived from pthreadGC.dll
 -        gcc.dll         - needed to build and run applications that use
 -                          pthreadGCE.dll.
 -
 -
 -Building applications with the library
 ---------------------------------------
 -
 -Use the appropriate DLL and LIB files to match the exception handing
 -that you use in your application, or specifically, in your POSIX
 -threads. Don't mix them or neither thread cancelation nor
 -pthread_exit() will work reliably if at all.
 -
 -If in doubt use the C (no-exceptions) versions of the library.
 -
 -
 -Building applications with GNU compilers
 -----------------------------------------
 -
 -If you're using pthreadGCE.dll:
 -
 -Use gcc-2.95.2-1 or later modified as per pthreads-win32 FAQ question 11.
 -
 -With the three header files, pthreadGCE.dll, gcc.dll and libpthreadGCE.a
 -in the same directory as your application myapp.c, you could compile,
 -link and run myapp.c under Mingw32 as follows:
 -
 -	gcc -x c++ -o myapp.exe myapp.c -I. -L. -lpthreadGCE
 -	myapp
 -
 -Or put pthreadGCE.dll and gcc.dll in an appropriate directory in
 -your PATH, put libpthreadGCE.a in MINGW_ROOT\i386-mingw32\lib, and
 -put the three header files in MINGW_ROOT\i386-mingw32\include,
 -then use:
 -
 -	gcc -x c++ -o myapp.exe myapp.c -lpthreadGCE
 -	myapp
 -
 -If you're using pthreadGC.dll:
 -
 -With the three header files, pthreadGC.dll and libpthreadGC.a in the
 -same directory as your application myapp.c, you could compile, link
 -and run myapp.c under Mingw32 as follows:
 -
 -	gcc -o myapp.exe myapp.c -I. -L. -lpthreadGC
 -	myapp
 -
 -Or put pthreadGC.dll in an appropriate directory in your PATH,
 -put libpthreadGC.a in MINGW_ROOT\i386-mingw32\lib, and
 -put the three header files in MINGW_ROOT\i386-mingw32\include,
 -then use:
 -
 -	gcc -o myapp.exe myapp.c -lpthreadGC
 -	myapp
 -
 -
 -Availability
 -------------
 -
 -The complete source code in either unbundled, self-extracting
 -Zip file, or tar/gzipped format can be found at:
 -
 -	ftp://sources.redhat.com/pub/pthreads-win32
 -
 -The pre-built DLL, export libraries and matching pthread.h can
 -be found at:
 -
 -	ftp://sources.redhat.com/pub/pthreads-win32/dll-latest
 -
 -Home page:
 -
 -	http://sources.redhat.com/pthreads-win32/
 -
 -
 -Mailing list
 -------------
 -
 -There is a mailing list for discussing pthreads on Win32.
 -To join, send email to:
 -
 -	pthreads-win32-subscribe@sources.redhat.com
 -
 -Unsubscribe by sending mail to:
 -
 -	pthreads-win32-unsubscribe@sources.redhat.com
 -
 -
 -Acknowledgements
 -----------------
 -
 -Pthreads-win32 is based substantially on a Win32 Pthreads
 -implementation contributed by John E. Bossom.
 -Many others have contributed important new code,
 -improvements and bug fixes. Thanks go to Alexander Terekhov
 -and Louis Thomas for their improvements to the implementation
 -of condition variables.
 -
 -See the 'CONTRIBUTORS' file for the list of contributors.
 -
 -As much as possible, the ChangeLog file also attributes
 -contributions and patches that have been incorporated
 -in the library.
 -
 -----
 -Ross Johnson
 -<rpj@ise.canberra.edu.au>
 -
 -
 -
 -
 -
 -
 -
 -
 +PTHREADS-WIN32 +============== + +Pthreads-win32 is free software, distributed under the GNU Lesser +General Public License (LGPL). See the file 'COPYING.LIB' for terms +and conditions. Also see the file 'COPYING' for information +specific to pthreads-win32, copyrights and the LGPL. + + +What is it? +----------- + +Pthreads-win32 is an Open Source Software implementation of the +Threads component of the POSIX 1003.1c 1995 Standard for Microsoft's +Win32 environment. Some functions from POSIX 1003.1b are also +supported including semaphores. Other related functions include +the set of read-write lock functions. The library also supports +some of the functionality of the Open Group's Single Unix +specification, version 2, namely mutex types. + +See the file "ANNOUNCE" for more information including standards +conformance details and list of supported routines. + + +Which of the several dll versions to use? +----------------------------------------- +or, +--- +What are all these pthread*.dll and pthread*.lib files? +------------------------------------------------------- + +Simply, you only use one of them, but you need to choose carefully. + +The most important choice you need to make is whether to use a +version that uses exceptions internally, or not (there are versions +of the library that use exceptions as part of the thread +cancelation and exit implementation, and one that uses +setjmp/longjmp instead). + +There is some contension amongst POSIX threads experts as +to how POSIX threads cancelation and exit should work +with languages that include exceptions and handlers, e.g. +C++ and even C (Microsoft's Structured Exceptions). + +The issue is: should cancelation of a thread in, say, +a C++ application cause object destructors and C++ exception +handlers to be invoked as the stack unwinds during thread +exit, or not? + +There seems to be more opinion in favour of using the +standard C version of the library (no EH) with C++ applications +since this appears to be the assumption commercial pthreads +implementations make. Therefore, if you use an EH version +of pthreads-win32 then you may be under the illusion that +your application will be portable, when in fact it is likely to +behave very differently linked with other pthreads libraries. + +Now you may be asking: why have you kept the EH versions of +the library? + +There are a couple of reasons: +- there is division amongst the experts and so the code may +  be needed in the future. (Yes, it's in the repository and we +  can get it out anytime in the future, but ...) +- pthreads-win32 is one of the few implementations, and possibly +  the only freely available one, that has EH versions. It may be +  useful to people who want to play with or study application +  behaviour under these conditions. + + +Library naming +-------------- + +Because the library is being built using various exception +handling schemes and compilers - and because the library +may not work reliably if these are mixed in an application, +each different version of the library has it's own name. + +Note 1: the incompatibility is really between EH implementations +of the different compilers. It should be possible to use the +standard C version from either compiler with C++ applications +built with a different compiler. If you use an EH version of +the library, then you must use the same compiler for the +application. This is another complication and dependency that +can be avoided by using only the standard C library version. + +Note 2: if you use a standard C pthread*.dll with a C++ +application, then any functions that you define that are +intended to be called via pthread_cleanup_push() must be +__cdecl. + +Note 3: the intention is to also name either the VC or GC +version (it should be arbitrary) as pthread.dll, including +pthread.lib and libpthread.a as appropriate. + +In general: +	pthread[VG]{SE,CE,C}.dll +	pthread[VG]{SE,CE,C}.lib + +where: +	[VG] indicates the compiler +	V	- MS VC +	G	- GNU C + +	{SE,CE,C} indicates the exception handling scheme +	SE	- Structured EH +	CE	- C++ EH +	C       - no exceptions - uses setjmp/longjmp + +For example: +	pthreadVSE.dll	(MSVC/SEH) +	pthreadGCE.dll	(GNUC/C++ EH) +	pthreadGC.dll   (GNUC/not dependent on exceptions) + +The GNU library archive file names have changed to: + +	libpthreadGCE.a +	libpthreadGC.a + + +Other name changes +------------------ + +All snapshots prior to and including snapshot 2000-08-13 +used "_pthread_" as the prefix to library internal +functions, and "_PTHREAD_" to many library internal +macros. These have now been changed to "ptw32_" and "PTW32_" +respectively so as to not conflict with the ANSI standard's +reservation of identifiers beginning with "_" and "__" for +use by compiler implementations only. + +If you have written any applications and you are linking +statically with the pthreads-win32 library then you may have +included a call to _pthread_processInitialize. You will +now have to change that to ptw32_processInitialize. + + +A note on Cleanup code default style +------------------------------------ + +Previously, if not defined, the cleanup style was determined automatically +from the compiler used, and one of the following was defined accordingly: + +	__CLEANUP_SEH	MSVC only +	__CLEANUP_CXX	C++, including MSVC++, GNU G++ +	__CLEANUP_C		C, including GNU GCC, not MSVC + +These defines determine the style of cleanup (see pthread.h) and, +most importantly, the way that cancelation and thread exit (via +pthread_exit) is performed (see the routine ptw32_throw() in private.c). + +In short, the exceptions versions of the library throw an exception +when a thread is canceled or exits (via pthread_exit()), which is +caught by a handler in the thread startup routine, so that the +the correct stack unwinding occurs regardless of where the thread +is when it's canceled or exits via pthread_exit(). + +In this snapshot, unless the build explicitly defines (e.g. via a +compiler option) __CLEANUP_SEH, __CLEANUP_CXX, or __CLEANUP_C, then +the build NOW always defaults to __CLEANUP_C style cleanup. This style +uses setjmp/longjmp in the cancelation and pthread_exit implementations, +and therefore won't do stack unwinding even when linked to applications +that have it (e.g. C++ apps). This is for consistency with most/all +commercial Unix POSIX threads implementations. + +Although it was not clearly documented before, it is still necessary to +build your application using the same __CLEANUP_* define as was +used for the version of the library that you link with, so that the +correct parts of pthread.h are included. That is, the possible +defines require the following library versions: + +	__CLEANUP_SEH	pthreadVSE.dll +	__CLEANUP_CXX	pthreadVCE.dll or pthreadGCE.dll +	__CLEANUP_C		pthreadVC.dll or pthreadGC.dll + +THE POINT OF ALL THIS IS: if you have not been defining one of these +explicitly, then the defaults as described at the top of this +section were being used. + +THIS NOW CHANGES, as has been explained above, but to try to make this +clearer here's an example: + +If you were building your application with MSVC++ i.e. using C++ +exceptions (rather than SEH) and not explicitly defining one of +__CLEANUP_*, then __CLEANUP_C++ was defined for you in pthread.h. +You should have been linking with pthreadVCE.dll, which does +stack unwinding. + +If you now build your application as you had before, pthread.h will now +set __CLEANUP_C as the default style, and you will need to link +with pthreadVC.dll. Stack unwinding will now NOT occur when a thread +is canceled, or the thread calls pthread_exit(). + +Your application will now most likely behave differently to previous +versions, and in non-obvious ways. Most likely is that locally +instantiated objects may not be destroyed or cleaned up after a thread +is canceled. + +If you want the same behaviour as before, then you must now define +__CLEANUP_C++ explicitly using a compiler option and link with +pthreadVCE.dll as you did before. + + +WHY ARE WE MAKING THE DEFAULT STYLE LESS EXCEPTION-FRIENDLY? +Because no commercial Unix POSIX threads implementation allows you to +choose to have stack unwinding. Therefore, providing it in pthread-win32 +as a default is dangerous. We still provide the choice but unless +you consciously choose to do otherwise, your pthreads applications will +now run or crash in similar ways irrespective of the threads platform +you use. Or at least this is the hope. + + + +Building under VC++ using C++ EH, Structured EH, or just C +---------------------------------------------------------- + +From the source directory run one of the following: + +nmake clean VCE	(builds the VC++ C++ EH version pthreadVCE.dll) + +or: + +nmake clean VSE	(builds the VC++ structured EH version pthreadVSE.dll) + +or: + +nmake clean VC	(builds the VC setjmp/longjmp version of pthreadVC.dll) + +You can run the testsuite by changing to the "tests" directory and +running the target corresponding to the DLL version you built: + +nmake clean VCE + +or: + +nmake clean VSE + +or: + +nmake clean VC + +or: + +nmake clean VCX	(tests the VC version of the library with C++ (EH) +			 applications) + + +Building under Mingw32 +---------------------- + +The dll can be built with Mingw32 gcc-2.95.2-1 after you've +made the changes to Mingw32 desribed in Question 6 of the FAQ. + +From the source directory, run + +make clean GCE + +or: + +make clean GC + +You can run the testsuite by changing to the "tests" directory and +running + +make clean GCE + +or: + +make clean GC + +or: + +make clean GCX	(tests the GC version of the library with C++ (EH) +			 applications) + + +Building the library under Cygwin +--------------------------------- + +Not tested by me although I think some people have done this. +Not sure how successfully though. + +Cygwin is implementing it's own POSIX threads routines and these +will be the ones to use if you develop using Cygwin. + + +Ready to run binaries +--------------------- + +For convenience, the following ready-to-run files can be downloaded +from the FTP site (see under "Availability" below): + +	pthread.h +	semaphore.h +	sched.h +	pthread.def +	pthreadVCE.dll	- built with MSVC++ compiler using C++ EH +	pthreadVCE.lib +	pthreadVC.dll	- built with MSVC compiler using C setjmp/longjmp +	pthreadVC.lib +	pthreadVSE.dll	- built with MSVC compiler using SEH +	pthreadVSE.lib +	pthreadGCE.dll	- built with Mingw32 G++ +	pthreadGCE.a	- derived from pthreadGCE.dll +	pthreadGC.dll	- built with Mingw32 GCC +	pthreadGC.a	- derived from pthreadGC.dll +        gcc.dll         - needed to build and run applications that use +                          pthreadGCE.dll. + + +Building applications with the library +-------------------------------------- + +Use the appropriate DLL and LIB files to match the exception handing +that you use in your application, or specifically, in your POSIX +threads. Don't mix them or neither thread cancelation nor +pthread_exit() will work reliably if at all. + +If in doubt use the C (no-exceptions) versions of the library. + + +Building applications with GNU compilers +---------------------------------------- + +If you're using pthreadGCE.dll: + +Use gcc-2.95.2-1 or later modified as per pthreads-win32 FAQ question 11. + +With the three header files, pthreadGCE.dll, gcc.dll and libpthreadGCE.a +in the same directory as your application myapp.c, you could compile, +link and run myapp.c under Mingw32 as follows: + +	gcc -x c++ -o myapp.exe myapp.c -I. -L. -lpthreadGCE +	myapp + +Or put pthreadGCE.dll and gcc.dll in an appropriate directory in +your PATH, put libpthreadGCE.a in MINGW_ROOT\i386-mingw32\lib, and +put the three header files in MINGW_ROOT\i386-mingw32\include, +then use: + +	gcc -x c++ -o myapp.exe myapp.c -lpthreadGCE +	myapp + +If you're using pthreadGC.dll: + +With the three header files, pthreadGC.dll and libpthreadGC.a in the +same directory as your application myapp.c, you could compile, link +and run myapp.c under Mingw32 as follows: + +	gcc -o myapp.exe myapp.c -I. -L. -lpthreadGC +	myapp + +Or put pthreadGC.dll in an appropriate directory in your PATH, +put libpthreadGC.a in MINGW_ROOT\i386-mingw32\lib, and +put the three header files in MINGW_ROOT\i386-mingw32\include, +then use: + +	gcc -o myapp.exe myapp.c -lpthreadGC +	myapp + + +Availability +------------ + +The complete source code in either unbundled, self-extracting +Zip file, or tar/gzipped format can be found at: + +	ftp://sources.redhat.com/pub/pthreads-win32 + +The pre-built DLL, export libraries and matching pthread.h can +be found at: + +	ftp://sources.redhat.com/pub/pthreads-win32/dll-latest + +Home page: + +	http://sources.redhat.com/pthreads-win32/ + + +Mailing list +------------ + +There is a mailing list for discussing pthreads on Win32. +To join, send email to: + +	pthreads-win32-subscribe@sources.redhat.com + +Unsubscribe by sending mail to: + +	pthreads-win32-unsubscribe@sources.redhat.com + + +Acknowledgements +---------------- + +Pthreads-win32 is based substantially on a Win32 Pthreads +implementation contributed by John E. Bossom. +Many others have contributed important new code, +improvements and bug fixes. Thanks go to Alexander Terekhov +and Louis Thomas for their improvements to the implementation +of condition variables. + +See the 'CONTRIBUTORS' file for the list of contributors. + +As much as possible, the ChangeLog file also attributes +contributions and patches that have been incorporated +in the library. + +---- +Ross Johnson +<rpj@ise.canberra.edu.au> + + + + + + + + | 
