2011-08-07 13 views
3

로컬 변수를 할당하지 않는 pthread를 사용하고 있습니다. 내가 여기로 가지 않을 이유를 들어, 나는 pthread_cancel() 옵션이 필요하고 내가 쓰는 쓰레드는 그것을 지원할 수 있어야한다. (리소스를 정리할 필요가 없다. 어떤 시점에서든 실행을 멈추라.) 지금은 문제가 있습니다. 왜냐하면 pthread가 실제로 실행을 끝내기 전에 pthread_cancel이 돌아 오기 때문에 스레드 제거 후에 만 ​​만지길 원하는 공유 리소스에 문제가 발생하기 때문입니다.pthread_cancel이 끝날 때까지 기다리는 중

내 pthread가 잘 결론 지어 졌는지 알 수있는 방법이 있습니까? 내가 찾지 못했던 함수 나 친숙하지 않은 매개 변수가 있을까요?

pthread_cancel(thread_handle); 
pthread_join(thread_handle, NULL); 

트릭을 할 것인가, 또는 (thread_handle부터 이미 유효하지 않을 수 있습니다) 보장되지 않았는지?

저는 pthreads를 처음 접했기 때문에 모범 사례가 환영합니다 (이미 배운 적이있는 "pthread_cancel()을 사용하지 마십시오", P).

답변

3

설명서 페이지 kernel.org 실제로 그것을하고 있습니다. 안전하다. 결합 가능한 스레드에서 pthread_join를 호출 할 때까지

s = pthread_cancel(thr); 
if (s != 0) 
    handle_error_en(s, "pthread_cancel"); 

/* Join with thread to see what its exit status was */ 

s = pthread_join(thr, &res); 
if (s != 0) 
    handle_error_en(s, "pthread_join"); 
1

는 그 TID는 유효합니다. 스레드가 조인 가능한 경우 (pthread_cancel이 안전해야 함) thread_handle은 여전히 ​​유효해야합니다.

스레드가 분리 된 경우 pthread_cancel을 호출해도 안전하지 않습니다. 스레드를 호출 한 것처럼 스레드가 종료되면 어떻게됩니까?

관련 문제