본문 바로가기

Library/Windows Programming

POSIX PTHREAD for Win32

Win32 환경에서 스레드 프로그래밍을 한다면, 당연히 Win32 스레드를 사용할 것이다. 스레드와 동기화 매커니즘은, 그 플랫폼에서 제공하는 관련 라이브러리를 사용하는 것이 가장 성능이 좋고, 안정성도 뛰어나기 때문이다. 다만, 문제는 Win32 스레드는 특정 벤더의, 특정 플랫폼에서의 구현이라는 점이다. Win32 스레드도 사용하기 쉬운 편에 속하지만, 윈도우를 어느 정도 알고 있어야 한다. 간단히 말해, 널리 알려진 POSIX PTHREAD와 다르기 때문에, Win32 환경에서 스레드 프로그래밍을 시작하려는 사람에게는 적당하지 않다.

특히, GNU 환경을 Win32에 포팅한 MinGW에서 스레드 관련 라이브러리를 제공하지 않기 때문에, 이런 아쉬움은 더욱 크다. 이런 사람들을 위해 POSIX PTHREAD를 Win32 환경에 포팅한 프로젝트가 있다.

http://sourceware.org/pthreads-win32/

라이센스는 GPL이며, LGPL 아래에서 배포되기 때문에 GPL을 따르지 않는 프로그램이라고 하더라도 링크가 가능하다. 다만, 이것은 MinGW에서 공식적으로 인정하는 프로젝트가 아니기 때문에 MinGW gcc에서 완벽하게 동작한다는 보장은 없다. 사용해보니, 아직까지 버그는 발견하지 못했다.

POSIX PTHREAD for Win32는 소스 코드 상태로 주어지기 때문에 직접 컴파일해서 바이너리를 만들어야 한다. 윈도우 환경에서의 pthread가 필요한 사람은 VC 프로젝트 파일이 있기 때문에 그것을 사용하면 되고, (Win32 환경에서 pthread를 사용한다?) 보통은 gcc와 함께 사용하기 위해서 이것을 사용할텐데, make 유틸리티가 동작 가능한 환경이어야 한다.

먼저 pthreadGC2 라이브러리를 만들고 pthreadGCE2 라이브러리를 만들어야 한다. GCE는 C++ 예외 처리가 추가된 것이다. pthreadGC2 라이브러리를 빌드하지 않은 상태에서 바로 pthreadGCE2 라이브러리를 만들 수 없다. 자신이 C++을 사용한다고 하더라도 GC 버전은 먼저 빌드해야 한다. makefile이 있고, GNUmakefile이 있기 때문에 make -f GNUmakefile을 사용하거나, 그냥 make를 입력하면 도움말이 나오니 필요한 옵션을 선택해서 빌드하면 된다. 일반적으로, 다음 명령을 입력하면 된다.

make clean
make GC
make GCE


Enjoy POSIX PTHREAD for Win32!


* 덧글 (2011.3.11) : 이제 POSIX Pthread for Win32는 MinGW 프로젝트에 공식으로 포함되어 제공된다. 이것은 1년 정도 되었지만, 이 포스팅을 쓴지 오래되었기 때문에 그냥 두었었다. MinGW를 사용한다면 번거롭게 POSIX Pthread for Win32를 빌드하지 않더라도 함께 제공되는 패키지를 설치하는 것으로 pthread를 쉽게 사용할 수 있다.