일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 리눅스 커널
- 리버싱
- 리눅스
- 워게임
- 드론
- Bandit
- write up
- 시스템프로그래밍
- 시스템
- 리눅스커널
- 프로그래밍
- C언어
- 컴퓨터구조
- C++
- 커널
- 시스템해킹
- 취약점
- 시그널
- css
- Pwnable.kr
- pwn.college
- wargame
- 알고리즘
- kernel
- 시스템 프로그래밍
- Leviathan
- pwncollege
- px4
- 어셈블리어
- radare2
Archives
- Today
- Total
Computer Security
#35 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습1) 본문
반응형
main함수를 해서 프로세스가 시작이되면 기본적으로 하나의쓰레드가 동작하게 된다.
두개의 쓰레드를 더 생성해서 생성한 두개의 쓰레드는 공유자원을 가지고 pthread_mutex 를 이용해서 동기화를 통해 공유자원의 접근을 하도록 하고, main함수를 시작한 원래 있었던 쓰레드는 기다렸다가 조인을 하고 마친 뒤, 프로그램을 종료하는 예제를 작성해보자.
1. 기본 뼈대를 만든다.
2. pthread_create() API를 이용해서 쓰레드를 생성한다.
#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를 작성한다.
#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. 전체코드이다.
6. makefile 을 이용해 컴파일 한다.
7. ./thread 를 이용해 실행 시켜보자.
정상적으로 출력 된 것을 알 수 있다!
반응형
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#37 기본 시그널 처리 1 (0) | 2022.10.12 |
---|---|
#36 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습2) (2) | 2022.10.11 |
#34 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (0) | 2022.10.09 |
#33 CPU 구조 (Processor affinity 실습) (0) | 2022.10.08 |
#32 CPU 구조 (2) | 2022.10.07 |
Comments