출처 : http://chirow.springnote.com/pages/1650700
1. Posix Thread Example
2. pthread 예제1 : 쓰레드 생성후 자동 종료
#include <stdio.h> pthread_t threads[5]; void *thread_main(void *); printf("pid=%d\n", getpid()); for (i = 0; i < 5; i++) for (i = 4; i >= 0; i--) return 0; printf("therad: %d, %d\n", (int)arg, getpid()); while (!done[(int)arg]) pthread_exit((void *) 0); |
3 pthread 예제2 : 쓰레드 생성후 강제로 종료
#include <stdio.h> pthread_t threads[5]; void *thread_main(void *); printf("pid=%d\n", getpid()); for (i = 0; i < 5; i++) for (i = 4; i >= 0; i--) return 0; printf("therad: %d, %d\n", (int)arg, getpid()); while (!done[(int)arg]) pthread_exit((void *) 0); |
4. pthread 예제3 : 쓰레드 생성후 쓰레드 분리 시키는 첫번째 예제
#include <stdio.h> pthread_t threads[5]; void *thread_main(void *); int main(void) printf("pid=%d\n", getpid()); for (i = 0; i < 5; i++) for (i = 4; i >= 0; i--) return 0; void *thread_main(void *arg) pthread_detach(pthread_self()); /* 쓰레드 분리 */ printf("therad: %d, %d\n", (int)arg, getpid()); while (!done[(int)arg]) pthread_exit((void *) 0); |
--> 결과를 보면 에러가 발생하는 것을 볼 수 있다.
참조사이트의 Thread Management > Joining Threads를 보면
It is impossible to join a detached thread (discussed next) 이라고 나온다.
즉, detached thread된 것은 join이 불가능하므로 pthread_join함수를 사용할 필요가 없다.
참고로 pthread_joinc은 waitpid와 비교될 수 있다.
5. pthread 예제4 : 쓰레드 생성후 쓰레드를 분리시키는 두번째 예제
위 예제에서 pthread_joinc에 관련된 코드를 삭제하였습니다.
#include <stdio.h> #include <string.h> #include <pthread.h> pthread_t threads[5]; int done[5]; void *thread_main(void *); int main(void) { int i; int rc; int status; printf("pid=%d\n", getpid()); for (i = 0; i < 5; i++) { done[i] = 0; pthread_create(&threads[i], NULL, &thread_main, (void *)i); printf("%d, %d\n", i, threads[i]); } for (i = 4; i >= 0; i--) { done[i] = 1; } /* 쓰레드들이 실행하고 종료할 때 까지 잠시 기다린다. sleep을 주지 않으면 메인이 종료되므로 자동으로 생성된 쓰레드도 강제종료되므로 올바른 테스트 진행되지 않아서 이다. */ sleep(5); return 0; } void *thread_main(void *arg) { int i; double result=0.0; pthread_detach(pthread_self()); printf("therad: %d, %d\n", (int)arg, getpid()); while (!done[(int)arg]) { for (i=0; i < 1000000; i++) { result = result + (double)random(); } printf("thread: %d, result = %e\n", (int)arg, result); } printf("thread %d terminated....\n", (int)arg); pthread_exit((void *) 0); } |
'프로그래밍' 카테고리의 다른 글
[C] 정적함수 (0) | 2013.01.29 |
---|---|
테라텀(Tera Term) 로그에 타임스탬프 출력 및 로그파일 이름 변경 (0) | 2013.01.21 |
CallBack func (0) | 2012.07.24 |
pthread_create 다중인자 전달 (0) | 2012.07.16 |
Main (0) | 2012.05.02 |