728x90

1. PThread란?

POSIX Threads, PThread는 병렬적으로 작동하는 소프트웨어의 작성을 위해서 제공되는 표준 API이다. 

2. pthread_create()

pthread를 생성하기 위해서는 pthread_create()함수를 사용한다. 

#include <pthread.h>

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, 
					void *(*start_routine)(void *), void *arg);
  1. thread_t : 스레드를 구분하기 위한 ID
  2. attr : 스레드를 생성할때 필요한 속성 값
  3. start_routine : 스레드로 해야할 일을 정의한 함수
  4. arg : 세번째 인자에서 사용한 start_routine 함수로 넘겨주는 값

함수의 호출이 성공하면 첫 번째 인자에 pthread_t형의 현재의 스레드에 대한 ID를 설정하고 0을 반환한다.

3. pthread_join()

스레드는 종료할때 까지 대기해야 한다. 서브 스레드가 실행되고 있는 때는 메인 스레드가 종료되지 않도록 해야하는데 이때 pthread_join() 함수를 사용한다.

#include <pthread.h>

int pthread_join(pthread_t thread, void **retval);
  1. thread : pthread_create()에서 설정된 스레드의 ID
  2. **retval : start_routine에서 반환되는 값을 받기위해 사용

4. 예제

컴파일 시 -lpthread를 추가한다.

ex) g++ -o thread thread.cpp -lpthread

#include <iostream>
#include <cstdlib>
#include <unistd.h>
#include <pthread.h>

using namespace std;

void* function_A(void* num)
{
	int i = 0;
	while (true)
	{
		cout << "funcA i = " << i << endl;
		i++;
		sleep(1);
	}
}
void* function_B(void* num)
{
	int i = 0;
	while (true)
	{
		cout << "funcB i = " << i << endl;
		i++;
		sleep(2);
	}
}
int main()
{
	pthread_t ptA, ptB;

	cout << "create Thread A" << endl;
	pthread_create(&ptA, NULL, function_A, NULL);
	cout << "create Thread B" << endl;
	pthread_create(&ptB, NULL, function_B, NULL);

	pthread_join(ptA, NULL);
	pthread_join(ptB, NULL);

	return 0;
}

728x90

+ Recent posts