2012-02-15 10 views
0

리눅스에서 C++의 스레드를 사용하여 프로그램을 작성하고 있습니다.멀티 스레딩 한도는?

현재 스레드 배열을 유지하고 있으며 1 초가 경과 할 때마다 어느 것이 완료되었는지 확인하고 다시 시작합니다. 이거 나쁜거야? 이 프로그램을 오랫동안 계속 실행해야합니다. 지금은 스레드를 다시 시작하는 많은 루프 (마지막 시도에서 100 번째 루프) 후에 코드 11을 얻고 있습니다. 재사용 스레드를 알아 냈고 한 번에 적은 수의 항목 만 실행되도록했습니다. 한계에 도달하지 않을 것입니다. 내가 사용하고있는 배열은 크기가 8 개뿐입니다 (물론, 매번 8 개가 시작되지 않고 중단 된 것입니다).

아이디어가 있으십니까?

내 코드는 다음과 같습니다 : 나는 루프에 들어갈 및 스레드를 처음 시작할 수 있습니다 단지 있도록

if (loop_times == 0 || pthread_kill(threads[t],0) != 0) 
{ 
    rc = pthread_create(&threads[t], NULL, thread_stall, (void *)NULL); 
    if (rc){ 
     printf("ERROR; return code from pthread_create() is %d\n", rc); 
     exit(-1); 
    } 
thread_count++; 
} 

loop_times 변수입니다. 그렇지 않으면 이전에 스레드가 시작되지 않았으므로 SEGFAULT가 발생합니다. 또한

, 나는 PTHREAD_THREADS_MAX의 가치를보고 싶어 한,하지만 ... 그것은 더 나은 갈 다중 스레드를 사용하려면 내가

+0

프로그램을 잠시 실행하면 ps -eLf를 사용하여 Linux에서 사용하고 있다고 생각하는 스레드 수를 확인할 수 있습니다. – masebase

+0

최근 컴파일러를 사용하는 경우 pthread 대신 C++ 을 사용하십시오. –

+0

스레드를 죽이는 것은 매우 나쁜 습관입니다. 끝내자. 많은 스레딩 API가 이러한 가능성을 부여하지 않을 것입니다. 그렇게하는 것이 좋지 않다고 말하는 사람들입니다. –

답변

1

내 문제는 매번 다시 시작하기 전에 내 스레드를 pthread_join해야한다는 것이 었습니다. 이 후, 나는 Valgrind를 통해 코드 11을 얻는 것을 중단하고 Valgrind를 통해 실행할 때 "여전히 도달 할 수있는"메모리를 가지고 있지 않습니다.

2

(limits.h를 포함하는 경우에도)을 인쇄 할 수 없습니다 스레드 풀용. 분리 된 스레드로 스레드 세트를 시작한 다음 대기열을 통해 모든 스레드에 정보를 전송할 수 있으므로 스레드에서 작업 할 수 있고 다음 입력을 기다릴 수 있습니다.

+0

그 (boost.threadpool)에 대해 제출되지 않은 부스트 ​​라이브러리가 있습니다. –

+0

더 많은 내용을 작성하면 응용 프로그램의 성능이 저하 될 수 있습니다. –

+0

그 이유는 한 번에 최대 8 개까지만 사용하기 때문입니다. 어쩌면 내가 너의 의견을 오해하고있다. – Risshuu