2012-09-09 3 views
3

pthreads를 시작하는 외부 linux 라이브러리를 사용하고 있습니다.스레드 시작시 pthread "pre init"함수 실행

thread "main"함수가 시작되기 전에 새 pthread가 스레드 컨텍스트에서 시작될 때 제공된 함수를 호출하는 트리거를 설정할 수있는 방법이 있습니까? (신호 처리기 또는 기타 설치)

+1

스레드에는 자체 신호 처리기가 없으므로 사용자가 오해를 기반으로하고 싶은 것으로 판단됩니다. 정말로 필요한 것을 분명히하십시오. 아마도 훨씬 더 좋은 방법 일 것입니다. –

+0

@R .. : 새로운 리눅스 프로세스 (리눅스상의 쓰레드를 포함한다)가 시그널 핸들러 테이블을 그 부모와 공유하는지 여부는 복제 시스템 호출에 대한 옵션이다. 그러나 어느 쪽이든, 이것은 신호가 존재하면 새로운 pthread가 시작될 때 (공유 신호 처리기로) 신호가 전송되는 것을 배제하지 않습니다. 스레드가 초기화 할 때마다 함수가 실행되도록하고 싶습니다.하지만 외부 라이브러리이므로 thread_main을 수정할 수 없습니다. (pthread_key_create가 스레드 출구에서 함수를 실행하는 것과 같은 방식으로) –

+0

** 새로운 스레드에서 특별히 ** 무엇을해야하는지 설명하십시오. 당신이 필요로하는 것을 성취 할 수있는 대체 방법이 있을지 모르지만, * 효과 * 달성 방법을 요구하는 대신 불가능한 메커니즘 *을 달성 할 수있는 방법을 요구할 때 당신을 도울 수는 없습니다. –

답변

2

요청한 것을 수행하는 표준 API가 없습니다. 항상 복잡하고 연약한 대안이 있습니다. 예를 들어 pthread_create를 가로 채고 스레드에 대한 호출자의 실제 함수 주위에 래퍼 함수를 ​​만들 수있는 필터 Shared Lib을 빌드 할 수 있습니다 (ld의 매뉴얼 페이지에서 --filter = name 옵션 참조).

+0

다른 (복잡하고 연약한) 대안은 무엇입니까? –

+0

시스템 호출을 가로 채고, 커널 드라이버를 작성하고, 외부 리눅스 라이브러리에서 바이너리 편집을 수행하는 프로그램을 작성합니다. – bmargulies

+0

새로운 쓰레드가 시작될 때 GDB는 어떤 것을 출력합니다. 어떤 메커니즘을 사용하는지 궁금합니다. –