일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- C언어
- Leviathan
- pwncollege
- radare2
- 어셈블리어
- 취약점
- write up
- 시스템 프로그래밍
- 프로그래밍
- wargame
- 커널
- 리눅스커널
- 시그널
- 리눅스
- 워게임
- px4
- Pwnable.kr
- 시스템
- css
- 드론
- 리버싱
- 시스템해킹
- 컴퓨터구조
- C++
- 시스템프로그래밍
- kernel
- pwn.college
- Bandit
- 알고리즘
- 리눅스 커널
Archives
- Today
- Total
Computer Security
#36 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습2) 본문
반응형
이전 시간에 이어서, 쓰레드가 생성된 이후에 공유자원을 놓고 mutex를 이용해서 동기화 할 수 있는 예제를 작성 해보자.
1.이전 시간의 코드이다.
2. 공유자원이 되는 shared 전역 변수를 만들어준 뒤, shared라는 변수를 100만번동안 +1 하고 100만번동안 -1을 한다 해보자.
- 동기화 하지 않은경우
컴파일 결과)
큰 숫자로 반복하게 되면, 하나의 공유자원을 놓고 더했다 뺐다 하게될텐데 오동작이 될 수 있다.
mutex lock을 통해서 보호 해서 오동작이 나지 않도록 해보자.
3. instance 선언 후, mutex_init API를 이용해서 초기화 해준다.
4. 공유자원(critical section)에 진입할때는 lock을 하고 종료될 때는 unlock을 해주자.
#include <pthread.h>
lock하는 API
int pthread_mutex_lock(pthread_mutex_t *mutex);
lock을 시도하는 API(락x일 경우 바로잡음, 락o일 경우 바로 err리턴)
int pthread_mutex_trylock(pthread_mutex_t *mutex);
unlock 하는 API
int pthread_mutex_unlock(pthread_mutex_t *mutex);
lock() ---> unlock()
5. 전체 코드이다.
6. makefile을 이용해 컴파일 해준 뒤, 실행 시켜보자.
이번엔 동기화 하지 않았을 경우와 다르게, 정상적으로 출력 된 것을 알 수 있다!
반응형
'리눅스 시스템 프로그래밍' 카테고리의 다른 글
#38 기본 시그널 처리 2 (0) | 2022.10.13 |
---|---|
#37 기본 시그널 처리 1 (0) | 2022.10.12 |
#35 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (실습1) (0) | 2022.10.10 |
#34 쓰레드 개념, 쓰레드 생성/종료/조인/동기화 (0) | 2022.10.09 |
#33 CPU 구조 (Processor affinity 실습) (0) | 2022.10.08 |
Comments