Multithread Programming Department of Computer Engineering Kyung Hee

  • Slides: 27
Download presentation
Multi-thread Programming Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1

Multi-thread Programming Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1

fork 함수 호출을 통한 process의 생성 int a=10; int main() { pid_t pid; int

fork 함수 호출을 통한 process의 생성 int a=10; int main() { pid_t pid; int b=20; pid = fork(); ……. } a=10 Data 영역 Heap 영역 pid=1133 b=20 Stack 영역 원본 process int a=10; int main() { pid_t pid; int b=20; pid = fork(); ……. } a=10 Data 영역 Heap 영역 pid=0 b=20 Stack 영역 복사본 process 3

Process and Thread 실행 흐름 실행되고 있는 일의 단위 Process_1 Thread_2 Thread_3 Operating System

Process and Thread 실행 흐름 실행되고 있는 일의 단위 Process_1 Thread_2 Thread_3 Operating System Thread_1 Process_2 Thread_3 4

Thread 생성 예제 1 q 프로그램 예제(thread 1. c) void *thread_function(void *arg); int main(int

Thread 생성 예제 1 q 프로그램 예제(thread 1. c) void *thread_function(void *arg); int main(int argc, char **argv) { int state; pthread_t t_id; state = pthread_create(&t_id, NULL, thread_function, NULL); if(state != 0){ puts("thread 생성 오류"); exit(1); } printf("생성된 thread의 ID : %d n", t_id); sleep(3); puts("main함수 종료"); return 0; } void *thread_function(void *arg) { int i; for(i=0; i<3; i++){ sleep(2); puts("thread 실행중"); } } 6

Thread 생성 예제 2 q 프로그램 예제(thread 2. c) void *thread_function(void *arg); int main(int

Thread 생성 예제 2 q 프로그램 예제(thread 2. c) void *thread_function(void *arg); int main(int argc, char **argv) { int state; pthread_t t_id; void *thread_function(void *arg) { int i; char * p = (char*)malloc(20*sizeof(char)); strcpy(p, "thread 종료 됨!n"); state = pthread_create(&t_id, NULL, thread_function, NULL); /* thread 생성 */ if(state != 0){ puts("thread 생성 오류"); exit(1); } printf("생성된 thread의 ID : %d n", t_id); /* thread 종료 시까지 main함수의 실행을 지연 */ state = pthread_join(t_id, &t_return); /* 리턴 값 저장 */ if(state != 0){ puts("thread Join 오류"); exit(1); } printf("main함수 종료, thread 리턴 %s", (char*)t_return); free(t_return); return 0; for(i=0; i<3; i++){ sleep(2); puts("thread 실행중"); } return p; } } 9

Thread 생성 예제 분석 Process 생성 thread join 대기상태 리턴 종료 종료 thread 1.

Thread 생성 예제 분석 Process 생성 thread join 대기상태 리턴 종료 종료 thread 1. c thread 2. c 10

Thread 관련 함수 q Thread ID 얻기 #include <pthread. h> pthread_t pthread_self(void); q Thread

Thread 관련 함수 q Thread ID 얻기 #include <pthread. h> pthread_t pthread_self(void); q Thread 종료 #include <pthread. h> void pthread_exit(void *retval) 11

Multi-thread 예제 q 프로그램 예제(thread 3. c, thread 4. c) [ 그림 17 -7

Multi-thread 예제 q 프로그램 예제(thread 3. c, thread 4. c) [ 그림 17 -7 ] 13

뮤텍스의 동기화 원리 2. Thread B 진입 pthread_mutex_lock 함 수 호출 후 임계영역에 진

뮤텍스의 동기화 원리 2. Thread B 진입 pthread_mutex_lock 함 수 호출 후 임계영역에 진 입 Thread B Thread A Critical Section Thread B 진입 Critical Section Thread A pthread_mutex_lock 함수 호출 후 대기 상태 1. pthread_mutex_unlock 함수 호출 후 임계 영역 탈출 Thread B Critical Section Thread A 진입 상태 19

프로그램 예제 q 프로그램 예제 dd semaphore 2. c Thread A A-1. number=1 number

프로그램 예제 q 프로그램 예제 dd semaphore 2. c Thread A A-1. number=1 number = 0 B-2. number=0 A-2. bit_sem=1 bit_sem = 0 B-1. bit_sem=0 A-3. bit_sem 2=0 bit_sem 2 = 0 Thread B B-3. bit_sem 2=1 semaphore 2. c의 동기화 과정 25

프로그램 예제 q a case - semaphore 2. c dd Thread A A-1. number=1

프로그램 예제 q a case - semaphore 2. c dd Thread A A-1. number=1 number = 0 1 B-2. number=0 A-2. bit_sem=1 bit_sem = 1 0 B-1. bit_sem=0 A-3. bit_sem 2=0 bit_sem 2 = 1 0 Thread B B-3. bit_sem 2=1 semaphore 2. c의 동기화 과정 26