2010-06-23 3 views
1

프로그래밍 플랫폼으로 C 언어와 Linux를 사용하고 있습니다.내 app mem 사용량이 pthread를 사용하여 증가하고 있습니다.

내 사용자 공간 응용 프로그램에서. 스레드를 만들 때 pthread를 사용했습니다.

int main() 
{ 
    pthread_t thread1, thread2; 
    pthread_create(&thread1, NULL, fthread1, NULL); 
    pthread_create(&thread2, NULL, fthread2, NULL); 

    return 0; 
} 

void *fthread1(void *ptr) 
{ 
    /* do something here */ 
    pthread_exit(NULL); 
} 

void *fthread2(void *ptr) 
{ 
    /* do something here */ 
    pthread_exit(NULL); 
} 

내 문제는 내가 루프는 pthread_create, 내 응용 프로그램의 메모리 사용량이 더 큰지고 다시 두 개의 스레드를 만들 때입니다.

while(1) 
{ 
    pthread_create(&thread1, NULL, fthread1, NULL); 
    pthread_create(&thread2, NULL, fthread2, NULL); 
} 

VSZ 열에 Linux ps 명령 줄 도구를 사용하여 메모리 사용량을 결정합니다.

pthreads API를 사용하여 일부 부품을 놓친 것 같습니다. 내 앱이 너무 많은 메모리를 사용하지 않게하려면 어떻게해야합니까?

+1

각 스레드는 자체 스택을 갖는 스레드를 시작합니다. 왜 메모리 사용량이 늘어날 것으로 기대하지 않습니까? – Stephen

+0

하지만 스레드가 이미 끝난 경우 (pthread_exit)? 사용 된 스택이 지워 져야합니까? – domlao

+1

당신이하고있는 일과 그 이유를 알지 못하면 _right_ 대답이 무엇인지 알기가 어렵습니다. 'while (1) pthread_create'는 최선의 선택이 아닙니다. :) 답변을 게시 한 가능한 솔루션을 제공합니다. – Stephen

답변

5

스레드가 아직 실행 중이거나 시작되지 않았을 때 스레드를 만들 가능성이 있습니다. 이것은 정의되지 않은 동작입니다. (읽기 : 아주 나쁜)

을 당신이 할 수있는 프로그램을 수정하는 경우 : 스레드가 새 스레드를 시작하기 전에 완료 될 때까지

while(1) 
{ 
    pthread_create(&thread1, NULL, fthread1, NULL); 
    pthread_create(&thread2, NULL, fthread2, NULL); 
    pthread_join(&thread1, NULL); 
    pthread_join(&thread2, NULL); 
} 

기다려야합니다.

각 스레드는 자체 호출 스택 및 제어 구조를 가지고 있으며 메모리를 소비합니다. 응용 프로그램의 스레드 수를 제한하고 스레드를 신속하게 작성 및 파괴하지 않는 것이 가장 좋습니다. 새로운 스레드를 만들 본 사람이 완료했는지 확인하기 위해 주위를 반복하기 전에

+2

두 발명품 모두 점프와 만남! (참조, 굴레의 길들이기). –

4

: 프로세서보다 빠른

while(1) 
{ 
    pthread_create(&thread1, NULL, fthread1, NULL); 
    pthread_create(&thread2, NULL, fthread2, NULL); 
    pthread_join(&thread1); 
    pthread_join(&thread2); 
} 

작성중인 스레드를 정리 할 수 ​​있습니다.

0

모든 스레드는 분리되거나 결합되어야합니다. 스레드를 분리하지 않고 분리 된 스레드를 만들지 않으며 스레드에 참가하지 않습니다. pthreads 구현은 절대 참여하지 않으려 고 할 수있는 방법이 없으므로 스레드를 영원히 유지해야합니다.

관련 문제