Coding & Programming/C, C++

[C/C++] Visual Studio(VC++)에서 pthread 사용하기(POSIX Threads Programming : pthread_c

mainCodes 2021. 2. 28. 08:49

[C/C++] Visual Studio(VC++)에서 pthread 사용하기(POSIX Threads Programming : pthread_create, pthread_join functions examples) 

 

안녕하세요 JollyTree(•̀ᴗ•́)و입니다.

오늘은 pthread(POSIX Thread) 라이브러리를 사용하는 예제를 포스팅하고자 합니다. 쓰레드를 생성, 이용하는 방법은 여러가지 방법이 있는데 그 중 한가지 방법이 pthread를 이용한 방법입니다.

다음은 pthread 사용 예제로 3개의 쓰레드(Thread)를 생성입니다. 쓰레드 함수(thread_func)에서 프로세스 ID와 쓰레드 ID를 구하여 출력합니다.

 

예제(Example):

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#define _CRT_SECURE_NO_WARNINGS 1
#define HAVE_STRUCT_TIMESPEC    1
 
#include <stdio.h>
#include <process.h>
#include "pthread32/inc/pthread.h"
 
 
void* thread_func(void* arg)
{
    pid_t pid;
    pthread_t tid;
 
    pid = _getpid();
    tid = pthread_self();
 
    for (int i = 0; i < 5; i++)
        printf("Thread start : 쓰레드이름 = %s, 프로세스ID = %d, 쓰레드ID = %d\n",
            (char*)arg, (unsigned int)pid, (unsigned int)tid);
 
    return NULL;
}
 
int main()
{
    pthread_t thread_id1, thread_id2;
    int thraed_status;
 
    if (pthread_create(&thread_id1, NULL, thread_func, (char*)"thread1")) {
        printf("쓰레드 생성 오류\n");
        exit(0);
    }
 
    if (pthread_create(&thread_id2, NULL, thread_func, (char*)"thread2")) {
        printf("쓰레드 생성 오류\n");
        exit(0);
    }
 
    thread_func((void*)"thread_main");
 
    pthread_join(thread_id1, (void**)&thraed_status); //쓰레드 종료까지 대기
    pthread_join(thread_id2, (void**)&thraed_status); //쓰레드 종료까지 대기

    return 0;
}
 
cs

실행결과(Output):

 

 

 

POSIX pthread 라이브러리 설치 & Visual Studio 2019 설정하기


1) 다운로드 & 설치하기
아래 링크에서 다운로드 후 원하는 경로에 압축을 해제하는 것으로 설치는 끝납니다.

ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip

동일한 파일이니 FTP 접속이 잘 안 되면 아래 HTTP mirror 사이트에서 다운로드 받으세요.

 

http://www.mirrorservice.org/sites/sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip

 

2) Visual Studio 2019에 헤더 및 라이브러리 설정하기

저의 경우 프로젝트(.vcxproj) 파일이 있는 경로에 .\pthread32\inc, .\pthread32\lib를 생성하여 헤더 파일 3개(pthread.h, sched.h,  semaphore.h)는 .\pthread32\inc 폴더에 라이브러리 파일(pthreadVC2.lib)은 .\pthread32\lib 폴더에 각각 복사하여 사용하였습니다.


Visual Studio 2019에 pthread 헤더와 라이브러리 추가는 다음과 같이 하면 됩니다.
C/C++ -> General -> Additional Include Directories에 ".\pthread32\inc" 를 설정합니다.

 

 

Linker -> General -> Additional Library Directories에 ".\pthread32\lib"를 설정합니다.

 

 

마지막으로, Linker -> Input -> Additional Dependencies에 "pthreadVC2.lib;"를 그림과 같이 추가합니다.

 

 

이상으로 POSIX pthread 사용하기를 마치겠습니다.