>> Edit article
이름
제목
패스워드
먼저 이 소스는 스레드를 5천개 까지 만들어 보는 함수 입니다. 그러나 1000여개(스레드 갯수가 1000여개가 아니구요 1000여번 pthread_create함수를 호출한다고 말하는게 더욱 정확 하겠내요) 정도가 되면 11번 에러를 내보내더라구요. 이유는 max_thread가 1024로 정의가 되어 있더라구요. 그래서 11번 에러 를 내는 것이구요. 근데 이상한 점은 vmstat 1로 찍어 보면 분명히 스레드 수치는 증감을 하면서 함수가 리턴되면 없어지고 있거든요. 근데 pthread_create 함수를 써서 만들면 1024를 못넘기고 죽어 버리는 현상이 나타 난다는것이죠. 그래서 주석처리 아래 함수들 pthread_cleanup_push,pthread_cleanup_pop함수를 써서 바꾸어 보았더니 5000개 까지 무사히 만들 더라구요. 그러나 문제는 제가 하는 작업에선 스레드 생성후에 만들어진 스레드에서 다시 스레드를 만들어 client로 부터 오는 패킷을 처리를 해야 하거든요. 요약을 하면, 제가 알고 싶은점. 1. pthread_cleanup_push,pthread_cleanup_pop함수를 사용한다면 선택적으로 pop을 할수 있는 방법이 있는지요? 2. 아님 어떤 다른 pthread함수를 사용해서 제가 하고자 하는 기능을 만들수 있는지요? 3. pthread_create 함수를 사용하면서 스레드를 5000개 이상 만들수 있는 방법? 부탁 드립니다. #include <pthread.h> #include <stdio.h> void func(int arg) { int i=0; while(i<9999999) { i++; } printf("this is thread %d",arg); } int main(void) { pthread_t th; int thr_err=0,k; void* (*thread_func)(void *); thread_func=func; for( k=0; k<5000 ; k++) { /* if (( thr_err=pthread_create(&th,NULL,thread_func,(void *)k)) != 0 ) { printf(" this is error num=%d",thr_err); exit(0); } */ pthread_cleanup_push(thread_func,(void *)k); printf(" Thread create success!!! %d",k); pthread_cleanup_pop(0); } // getchar(); return 0; } -- 이 곳에 서명을 적어주십시오.이희석
Copyleft
1999-2026 by
JSBoard Open Project
Theme Designed by
IDOO
All right reserved