문제

나는 몇 가지 문제에 최초로 스레드에서 C.려고 노력해요(지금)를 쓰는 매우 간단하는 서버 프로그램을 받 소켓 연결을 시작합 새로운 스레드를 처리합니다.그것은 잘 작동할 것을 제외하고 만들에 대해 300 개의 스레드(303,때로는 304)하기 전에 지칭()이 실패하고 코드 플래그는 의미한다:

"시스템 부족하는 데 필요한 리소스를 다른 스레드를 만들거나 시스템에서 부과하는 제한에 대해 수행하는 프로세스에서{PTHREAD_THREADS_MAX}것을 초과했습니다."

303 스레드에서 동시-각 스레드가 종료에 의해 확인되는 gdb.때마다 요청을 처리 함수가 호출되어 있는 두 개의 스레드를 실행합니다.

그래서 그것이 의미하"시스템 부족하는 데 필요한 리소스".나의 질문(수 있는 비트를 바보)-왜 이러한 리소스?아마도 그것의 메모리 누수가 나의 프로그램(확실히 가능성 심지어),하지만 내 생각에는 그래도 그것을 관리할 수 있 300 개 이상의 고려의 나머지 프로그램은 매우 작습니다.

게 찾을 수 있는 방법은 얼마나 많은 메모리 나의 프로그램은 사용할 수 있는지 확인하기 위해 실행하겠습니까?많은 메모리 및 스왑 그래서 아마도 있는 인공적인 한도에서 부과하는 OS(Linux).

감사

도움이 되었습니까?

해결책

는 경우를 만들지 않는 스레드와 함께 특성 PTHREAD_CREATE_DETACHED (또는 분리와 함께 그들을 pthread_detach(), 해야 할 수 있습 call pthread_join() 에 각을 만들에 스레드를 종료하는 자원을 연결되어 있습니다.

다른 팁

아마 약간의 과잉(?) 지 Valgrind 를 찾는 데 도움이 될 수 있습 memleaks 에서 리눅스.

할 수 있었 당신은 아마도시 코드 조각?바람직하게는 부분을 할당/메모리/소켓과를 만들의 스레드입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top