2014-01-16 6 views
1

FreeBSD의 stdio.h의 변수 선언은 '__isthreaded'입니다. 프로세스가 스레드를 만들 때까지이 변수는 0입니다. libc에서 잠금 함수를 호출하지 않도록하는 데 사용됩니다.FreeBSD의 __isthreaded 동등한 리눅스

그러나 이것은 스레드의 존재를 확인하는 이식성있는 방법이 아닙니다. Linux는 이것을 지원하지 않습니다. Linux에 동등한 변수 또는 API가 있습니까? FreeBSD에서 Linux로 일부 코드를 이식하려고합니다.

미리 도움을 주셔서 감사합니다.

+0

아마도 존재하지 않고'#define __isthreaded 1' –

+0

하지만 같은 행동을하는 것은 도움이되지 않습니다. 예를 들어, __isthreaded가 0이 아닌 경우에만 pthread_mutex_lock()을 호출하면됩니다. 위의 #define을 사용하면 항상 잠금이 호출됩니다. – jestin

+0

예, 항상 동기화 프리미티브를 호출합니다. 요즘 큰 문제는 아닙니다. 정말로 원한다면'/ proc/self/task/'를 사용하고 내부 디렉토리의 수를 세어 스레드 수를 세지 만 훨씬 느립니다. –

답변

0

glibc는 glibc에서 대부분의 pthread 라이브러리에 스텁 함수를 정의하는 것과 거의 동일한 기능을 제공합니다. 이 호출은 아무 것도하지 않고 매우 빠릅니다.

libpthread.so가 링크되면 기호가 약한 glibc 기호를 덮어 쓰고 실제 함수가 호출됩니다.

그래서 pthread를 포함하고 잠금 함수를 호출하지만 링크하지 않습니다.

+0

나는 pthread_mutex_lock()이 lpthread에 링크되어 있지 않으면 Linux에서 아무런 이유가 없다고 생각합니다. – jestin