Contributors (in approximate order of appearance)

[See also the ChangeLog file where individuals are
attributed in log entries. Likewise in the FAQ file.]

Ben Elliston		bje at cygnus dot com
					Initiated the project;
					setup the project infrastructure (CVS, web page, etc.);
					early prototype routines.
Ross Johnson		rpj at callisto dot canberra dot edu dot au
					early prototype routines;
					ongoing project coordination/maintenance;
					implementation of spin locks and barriers;
					various enhancements;
					bug fixes;
					documentation;
					testsuite.
Robert Colquhoun	rjc at trump dot net dot au
					Early bug fixes.
John E. Bossom		John dot Bossom at cognos dot com
					Contributed substantial original working implementation;
					bug fixes;
					ongoing guidance and standards interpretation.
Anders Norlander	anorland at hem2 dot passagen dot se
					Early enhancements and runtime checking for supported
					Win32 routines.
Tor Lillqvist		tml at iki dot fi
					General enhancements;
					early bug fixes to condition variables.
Scott Lightner		scott at curriculum dot com
					Bug fix.
Kevin Ruland		Kevin dot Ruland at anheuser-busch dot com
					Various bug fixes.
Mike Russo		miker at eai dot com
					Bug fix.
Mark E. Armstrong	avail at pacbell dot net
					Bug fixes.
Lorin Hochstein 	lmh at xiphos dot ca
					general bug fixes; bug fixes to condition variables.
Peter Slacik		Peter dot Slacik at tatramed dot sk
					Bug fixes.
Mumit Khan		khan at xraylith dot wisc dot edu
					Fixes to work with Mingw32.
Milan Gardian		mg at tatramed dot sk
					Bug fixes and reports/analyses of obscure problems.
Aurelio Medina		aureliom at crt dot com
					First implementation of read-write locks.
Graham Dumpleton	Graham dot Dumpleton at ra dot pad dot otc dot telstra dot com dot au
					Bug fix in condition variables.
Tristan Savatier	tristan at mpegtv dot com
					WinCE port.
Erik Hensema		erik at hensema dot xs4all dot nl
					Bug fixes.
Rich Peters		rpeters at micro-magic dot com
Todd Owen		towen at lucidcalm dot dropbear dot id dot au
					Bug fixes to dll loading.
Jason Nye		jnye at nbnet dot nb dot ca
					Implementation of async cancelation.
Fred Forester		fforest at eticomm dot net
Kevin D. Clark		kclark at cabletron dot com
David Baggett		dmb at itasoftware dot com
					Bug fixes.
Paul Redondo		paul at matchvision dot com
Scott McCaskill 	scott at 3dfx dot com
					Bug fixes.
Jef Gearhart		jgearhart at tpssys dot com
					Bug fix.
Arthur Kantor		akantor at bexusa dot com
					Mutex enhancements.
Steven Reddie		smr at essemer dot com dot au
					Bug fix.
Alexander Terekhov	TEREKHOV at de dot ibm dot com
					Re-implemented and improved read-write locks;
					(with Louis Thomas) re-implemented and improved
					condition variables;
					enhancements to semaphores;
					enhancements to mutexes;
					new mutex implementation in 'futex' style;
					suggested a robust implementation of pthread_once
					similar to that implemented by V.Kliathcko;
					system clock change handling re CV timeouts;
					bug fixes.
Thomas Pfaff		tpfaff at gmx dot net
					Changes to make C version usable with C++ applications;
					re-implemented mutex routines to avoid Win32 mutexes
					and TryEnterCriticalSection;
					procedure to fix Mingw32 thread-safety issues.
Franco Bez		franco dot bez at gmx dot de
					procedure to fix Mingw32 thread-safety issues.
Louis Thomas		lthomas at arbitrade dot com
					(with Alexander Terekhov) re-implemented and improved
					condition variables.
David Korn		dgk at research dot att dot com
					Ported to UWIN.
Phil Frisbie, Jr.	phil at hawksoft dot com
					Bug fix.
Ralf Brese		Ralf dot Brese at pdb4 dot siemens dot de
					Bug fix.
prionx at juno dot com 	prionx at juno dot com
					Bug fixes.
Max Woodbury		mtew at cds dot duke dot edu
					POSIX versioning conditionals;
					reduced namespace pollution;
					idea to separate routines to reduce statically
					linked image sizes.
Rob Fanner		rfanner at stonethree dot com
					Bug fix.
Michael Johnson 	michaelj at maine dot rr dot com
					Bug fix.
Nicolas Barry		boozai at yahoo dot com
					Bug fixes.
Piet van Bruggen	pietvb at newbridges dot nl
					Bug fix.
Makoto Kato		raven at oldskool dot jp
					AMD64 port.
Panagiotis E. Hadjidoukas	peh at hpclab dot ceid dot upatras dot gr
					Contributed the QueueUserAPCEx package which
					makes preemptive async cancelation possible.
Will Bryant		will dot bryant at ecosm dot com
					Borland compiler patch and makefile.
Anuj Goyal		anuj dot goyal at gmail dot com
					Port to Digital Mars compiler.
Gottlob Frege		gottlobfrege at  gmail dot com
					re-implemented pthread_once (version 2)
					(pthread_once cancellation added by rpj).
Vladimir Kliatchko	vladimir at kliatchko dot com
					reimplemented pthread_once with the same form
					as described by A.Terekhov (later version 2);
					implementation of MCS (Mellor-Crummey/Scott) locks.
