[ANNOUNCEMENT] Updated: mingw-pthreads-20110507-2

Charles Wilson cygwin@cwilson.fastmail.fm
Wed Jul 17 21:28:00 GMT 2013

The mingw-pthreads package provides Pthreads-W32, for use with the
MinGW cross toolchain.  Pthreads-W32 provides a POSIX-compliant pthreads
implementation for the Win32 platform.  The MinGW cross toolchain's
libgomp library, which provides openmp support for that compiler, is
linked against pthreadGC2.dll, as provided by this package.

Two versions of Pthreads-W32 are supplied:
  1. pthreadGC2.dll    (C cleanup code)
  2. pthreadGCE2.dll   (C++ cleanup code)
The first version is used by default. To use the GCE version, link
with -lpthreadGCE2 rather than -lpthreadGC or -lpthread.  Note that most
platforms' pthread implementations, even when used with C++, follow
the C cleanup model; that practice is also the recommended procedure in
this case, with the MinGW cross compiler.

To be perfectly clear: most users of the i686-pc-mingw32 cross compiler,
if they desire to exploit pthreads functionality, should use -lpthread
(which is the same as -lpthreadGC) regardless of language: C, C++, 
whatever. Furthermore, if you use the OpenMP (-fopenmp) features of GCC,
then you must link against the "normal" pthreads library, because libgomp
uses that version, and mixing the two versions is illadvised.  Only those
intrepid adventurers willing to brave the wilds of unusual, nay, wildly
unpredictable, behavior should attempt to use the GCE (-lpthreadGCE)
version -- and then, only if they are writing C++ programs.  Read the
pthreads-win32 documentation before experimenting with the C++ version.

The non-standard DLL names are used to match the versions distributed by
upstream Pthreads-W32. The DLLs are compiled using the same options as
the upstream build (e.g. GC-inline, GCE-inline).

There is a kernel mode driver that can be installed to (supposedly)
improve the conformance of Pthreads-W32 with respect to thread
cancellation during windows IO calls. It is available from MinGW.org as
QueueUserAPCEx-install.exe.  This executable is a handy Inno-Setup
installer for the i386, x86_64, and ia64 versions of the driver.
However, it has a number of issues -- not least of which is that I have
NOT found ANY conformance improvement *at all*!

First, the 64bit bit drivers are completely untested.  Second, Windows7
and Server2008 require all kernel mode drivers to be signed by a
certified CA, at least in their 64bit incarnations (I'm not sure about
the 32bit versions).  I don't have a signed certicate with which to sign
the driver -- and am not likely to ever get one.  So, it's a good thing
that libpthread works pretty well even without this driver.

So...that's why the version of Pthreads-W32 which uses C cleanup is used
by default.  For the curious, more information about the alertdrv.sys
driver can be found at the following links:
and the release notes accompanying QueueUserAPCEx-install.exe.

Changes since 20110507-1
* Rebuild as part of mingw-gcc refresh
* Rely on cygport-generated setup.hint
* First cygwin64 build

Charles Wilson


To update your installation, click on the "Install Cygwin now" link
on the http://cygwin.com/ web page.  This downloads setup.exe to
your system.  Then, run setup and answer all of the questions.


If you want to unsubscribe from the cygwin-announce mailing list, look
at the "List-Unsubscribe: " tag in the email header of this message.
Send email to the address specified there.  It will be in the format:


If you need more information on unsubscribing, start reading here:


Please read *all* of the information on unsubscribing that is available
starting at this URL.

Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

More information about the Cygwin mailing list