I was thinking pthreads is to Linux only. Little did I know after I did the research, pthreads is another specification adopted by many platforms except of course Microsoft Windows. Fortunately, someone took the time to implement the pthread API natively on Windows.
http://sourceware.org/pthreads-win32/
It looks a bit out of date but it should be okay... I hope....
Yeah, Cygwin is quite convenient but it does do some rather dumb things.
A great example is taking out a re-entrant function (gethostbyname_r) because gethostbyname is thread safe in there library. But now every person who implemented using gethostbyname_r has to setup a crappy macro to fix all of this.
MSys is by no means the same as Cygwin though. Cygwin attempts to implement a POSIX compliant API, thus allowing most Linux applications to compile on Win32 under certain circumstances. This is a great benefit though, even with the small kinks. If this didn't exist, I couldn't use BSD sockets or pthreads, especially since no one else implemented this in an individual library or API.
MinGW doesn't do this and simply gives a minimal GCC environment. It also provides it's own version of win32 gcc.