문제

나는 코딩을 종료의 다중 스레드 서버입니다.면 모든 것이어야로 모든 쓰레드를 종료하여,자신만의 작은 가능성이 있는 스레드가 붙어 있습니다.이 경우에는 그것이 편리하게 될 것이 아닌 차단 참여 그래서 내가 할 수 있습니다.

는 방법이 있을 차단하지 않는 pthread_join?일종의 시간 제한 참가 될 것이 너무 좋다.

무언가 이것을 좋아한다:

foreach thread do
  nb_pthread_join();
    if still running
      pthread_cancel();

나는 생각할 수 있는 더 많은 경우 비 bloking 에 가입하는 것이 유용합니다.

로는 없는 것 같은 기능 그래서 나는 이미 코드는 해결 방법이지만,그것은 간단하지 않으로 나가고 싶습니다.

도움이 되었습니까?

해결책

다른 사람들이 지적으로 있지 않은 비단 pthread_join 에서 사용할 수 있는 표준 pthread 라이브러리입니다.

그러나 언급한 문제(하는 것을 보장하는 귀하의 모든 쓰레드가 종료된 프로그램을 종료)같은 기능이 필요하지 않습니다.단순히 할 수 있다:

int killed_threads = 0;
for(i = 0; i < num_threads; i++) {
   int return = pthread_cancel(threads[i]);
   if(return != ESRCH)
      killed_threads++;
}
if(killed_threads)
    printf("%d threads did not shutdown properly\n", killed_threads)
else
    printf("All threads exited successfully");

아무 잘못 부 pthread_cancel 에 모든 당신의 스레드(제거 또는지)그렇게 부르는 것에 대한 모든 스레드는 차단되지 않을 보장 스레드 종료(정지).

는 자격을 갖추어야 하'으로'간단한 해결 방법입니다.

다른 팁

는 경우 응용 프로그램을 실행하는 리눅스에서,당신은 관심이있을 수 있습니다는 것을 알:

int pthread_tryjoin_np(pthread_t thread, void **retval);

int pthread_timedjoin_np(pthread_t thread, void **retval,
                                const struct timespec *abstime);

으로,주의하십시오 접미사는 제안,"np"의 뜻은"휴대용이 아닌".그들은 POSIX 표준,gnu 확장,유용하지만.

에 대한 링크를 남자 페이지

는'pthread_join'메커니즘의 편의를 위해 사용될 경우 그것은 일을 정확히 무엇을 원하다.아무것도하지 않고 당신이 할 수 없다는 자신을,어디서 정확히 무엇을 원하는 코드는 정확하게 당신이 무엇을 원합니다.

는 진짜 이유로 당신은 실제로 관심을 가져야하는지 여부를 스레드가 종료되거나지 않습니다.당신은 무엇이 걱정할지 여부는 작업에 실이었을 완료합니다.을 말하는 스레드가 뭔가를 나타내는 것이 작동하는 것입니다.당신은 어떻게에 따라 달라지는 것에 대한 특정 문제는 무엇 실습니다.

시작하신의 생각을 변경하여.되지 않는 스레드에 고정되어 그것이 무엇을 실시되는니다.

으로 개발하는 경우에는 QNX,사용할 수 있습 pthread_timedjoin()함수입니다.

그렇지 않으면,당신은 당신을 만들 수 있는 별도의 스레드로 실행되는 것이 pthread_join()및 경보 부모 쓰레드에 의하여,신호 세마포에 대한 예제는 아이 스레드가 완료됩니다.이는 별도의 스레드를 반환할 수 있는 것은 면에서 pthread_join()자 부모 쓰레드 확인하지 않는 경우에만 아동이 완료 하지만 또한 어떤 값을 반환합니다.

대답은 정말에 따라 달라집하려는 이유다.하려는 경우에는 정 죽은 스레드,예를 들어,그것은 아마도 가장 쉬운 그냥"죽은 스레드를 깨끗"는 스레드 루프와 조인.

나는 확실하지 않다 정확히 무엇을 의미하지만,제가 생길 것 같아요 당신이 정말로 필요한 것은 기다리와 알 메커니즘이 있습니다.

에서 짧은,여기에 어떻게 작동:당신을 기다립 조건을 만족과 함께 시간을 초과했습니다.당신의 기다림 이상이 될 것이다면:

  • 시간 초과 발생,또는
  • 는 경우 이 조건이 만족하고 있습니다.

할 수 있는 이 루프에서 추가 좀 더 많은 정보를 논리입니다.최 자원 내가 찾는 이와 관련된 인수를 입력하는 것은 이 튜토리얼:POSIX 쓰레드 프로그래밍(https://computing.llnl.gov/tutorials/pthreads/).

나는 또한 매우 놀라게 볼 수 없다는 API 를 위한 시간에 참여 인수를 입력.

이 없 시간 제한 pthread_join, 하지만 경우에 당신을 기다리고 다른 스레드 차단한 조건에 사용할 수 있습니다 시간 제한 pthread_cond_timed_waitpthread_cond_wait

할 수 있습 밀어 바이트로 파이프를 열 차단하는 신호를 다른 스레드에면,다음 사용하 non-blocking 읽 상태를 확인하려면의 파이프입니다.

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