Computer Security

#35 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습1) 본문

리눅스 시스템 프로그래밍

#35 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습1)

쿠리 Kuri 2022. 10. 10. 18:30
반응형

main함수를 해서 프로세스가 시작이되면 기본적으로 하나의쓰레드가 동작하게 된다.

 

두개의 쓰레드를 더 생성해서 생성한 두개의 쓰레드는 공유자원을 가지고 pthread_mutex 를 이용해서 동기화를 통해 공유자원의 접근을 하도록 하고, main함수를 시작한 원래 있었던 쓰레드는 기다렸다가 조인을 하고 마친 뒤, 프로그램을 종료하는 예제를 작성해보자.

 

 

 

 

 


1. 기본 뼈대를 만든다.

main

 

 

 

 

 


2. pthread_create() API를 이용해서 쓰레드를 생성한다.

create

#include <pthread.h>


int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);

 

i) pthread_t 자료형에 child_thread[2] 을 선언한다.

 

ii) pthread_create(&child_threads[0], NULL, child_thread_main, NULL) 을 이용해 만들어준다.

 

iii) 예외처리해준다.

 

 

 

 

 

 

 


3. child_thread를 기다렸다가 리소스를 정리해주는 pthread_join() API를 작성한다.

join

#include <pthread.h>

int pthread_join(pthread_t thread, void **retval);

-해당 쓰레드를 종료 처리

 

파라미터

- thread : 기다릴 thread ID

- retval : 해당 thread의 exit status를 저장

 

반환 값

- 성공 시 0

- 실패 시 errno를 리턴

 

 

 

 

 

i) 첫번째와 두번째 쓰레드를 조인해준다.

 

ii) 예외처리해준다.

 

 

 

 

 

 


4. 쓰레드가 생성된 이후에, 자기 쓰레드 ID를 출력하고 바로 끝내는 코드를 작성하자.

#include <pthread.h>

pthread_t pthread_self(void);

동작하고 있는 쓰레드의 ID 가져오는 API인 pthread_self() API를 사용한다.

 

 

 

 

 

 


5. 전체코드이다.

thread.c

 

 

 

 

 

 


6. makefile 을 이용해 컴파일 한다.

makefile

 

 

 

 

 

 


7. ./thread 를 이용해 실행 시켜보자.

./thread

정상적으로 출력 된 것을 알 수 있다!

 

 

반응형
Comments