2016-10-25 2 views
0

사용할 수있는 경우 pthread_setname_np 기능을 사용하고 싶습니다. 맨 페이지에서 코드 :Glibc 기능 테스트 매크로를 사용하는 방법?

#ifdef _GNU_SOURCE 
    pthread_setname_np(pthread_self(), "mythread"); 
#endif 

이 필요하지 않은 포함합니다 내가 사용하는 C++ #include <thread>pthreads를 당길 것 때문에 :

#define _GNU_SOURCE    /* See feature_test_macros(7) */ 
    #include <pthread.h> 
    int pthread_setname_np(pthread_t thread, const char *name); 
    int pthread_getname_np(pthread_t thread, 
          char *name, size_t len); 

은 (없음, 아니 정의를 포함하지 않는) 그런 식으로 수행하는 것이 안전한가요 . _GNU_SOURCE은 항상 libstdc++에서 사용하도록 설정되며, 사용 중지되면 코드는 계속 컴파일됩니다.

이 나는 ​​뭔가를 놓치고 있습니까?

+1

[feature_test_macros (7)] (http://man7.org/linux/man-pages/man7/feature_test_macros.7.html)을 읽었습니까? –

+0

@BasileStarynkevitch, 예. 그것은 표준 라이브러리가 제공하는 것을 제어하는 ​​것입니다. 빌드가 어떻게 설정되었는지에 따라 프로그램의 기능을 활성화하는 데 관심이 있습니다. – Velkan

+0

이 질문은 tag'd가'c' 인 것처럼 보이지만 실제 질문은'C++ '에 대해 논의했습니다. 이들은 다른 언어입니다. 하나 골라주세요. – user3629249

답변

4

은 (없음, 아니 정의를 포함하지 않음)이 안전 단지 그렇게 할 수 있나요 :

예. pthread_setname_np의 프로토 타입을 제공하는 <pthread.h>을 포함하는 한 안전합니다.

필자가 사용하는 C++ #include가 pthreads를 가져 오는 것으로 인해 포함되지 않습니다.

libc++은 아래의 pthreads 라이브러리를 사용합니다. 따라서 pthread.h과 작동합니다. 그러나 <thread>을 포함하면 pthread.h은 필요하지 않습니다. libc++이 기본 메커니즘을 변경하여 스레드를 구현하면 어떨까요? 따라서 pthread.h을 전달하는 것은 다른 방법으로 사용할 수 있기 때문에 안전하지 않습니다.

관련 문제