728x90
child1과 child2가 거의 동시에 실행되기에 하나의 실행이 채 끝나기 전에 entered되고 exits 되는 일이 발생함
이를 방지하기 위해 child1, child2 중 어떤 것이 먼저 실행되면 다른 하나는 접근하지 못하도록 하는 세마포어를 구현해보자.
실행 환경 : WSL ubuntu
#include <stdio.h>
#include <unistd.h>
#include <assert.h>
#include <semaphore.h>
#include <pthread.h>
#include <stdlib.h>
sem_t m1, m2;
void *child1(void *arg) {
printf("child thread 1 entered!\n");
sem_post(&m1);// call semaphoreshere here
sem_wait(&m2);
printf("child thread 1 exits!\n");
return NULL;
}
void *child2(void *arg) {
printf("child thread 2: entered!\n");
sem_post(&m2);// call semaphores here
sem_wait(&m1);
printf("child thread 2: exits\n");
return NULL;
}
int main(int argc, char *argv[]) {
pthread_t p1, p2;
printf("parent thread: begin\n");
sem_init(&m1, 0, 0);// init semaphores here
sem_init(&m2, 0, 0);
pthread_create(&p1, NULL, child1, NULL);
pthread_create(&p2, NULL, child2, NULL);
pthread_join(p1, NULL);
pthread_join(p2, NULL);
printf("parent thread: end\n");
return 0;
}
세마포어를 구현하기 전 실행 결과 :
세마포어를 구현한 후 실행 결과 :
728x90
'정보보안 공부 > 운영체제, 시스템' 카테고리의 다른 글
[시스템 보안] 세그멘테이션 폴트를 gdb 디버깅을 통해 확인하기 (0) | 2022.06.26 |
---|---|
[시스템 보안] 백도어 (back door) (0) | 2022.06.26 |
[시스템 보안] 레이스 컨디션 (race condition) (0) | 2022.06.26 |