2012-12-08 4 views
3

pthread_sigmask가 Android에서 작동하지 않는 것으로 보입니다. 이 문제는 2 년 전에 here으로보고 된 것으로 보이지만 개발자로부터 아무런 반응이 없습니다. 매우 비슷한 문제 (아래 코드를 참조)가 있습니다. 내가 잘못했거나 Android NDK에 문제가 있습니까? 그리고 스레드에 제한된 특정 신호를 처리 할 때 두 개의 스레드를 사용할 수있는 방법에 대한 도움말이나 도움이 필요하십니까?안드로이드에서 pthread_sigmask가 작동하지 않습니까?

Android 2.2에서이 코드를 실행하고 있습니다.

// block the signal in this thread 
sigset_t signals; 
sigemptyset(&signals); 
sigaddset(&signals, SIGALRM); 
int ret = pthread_sigmask(SIG_BLOCK, &signals, NULL); 
if (ret) { 
    LOG("pthread_sigmask failed. %d", ret); 
} 

22 (EINVAL) 오류가 발생합니다. SIG_UNBLOCK에 대해서도 동일한 오류가 발생합니다.

업데이트 : 4.1 장치에서 작동하는 것처럼 보입니다. 나는 4.1을 시도했고 성공할 것으로 보인다. 2.3 및 4.0 장치에서도 오류가 발생했습니다.

특정 신호에 대한 신호 처리기가 하나의 스레드에서만 실행되도록하는 방법에 대한 힌트가 있습니까? 모든 도움을 미리 감사드립니다. 구현이 여기에 고정 된 것처럼

답변

4

같습니다 :

https://android.googlesource.com/platform/bionic/+/9bf330b5676d0f60b3e4c3b8985494bcb1134e8b

당신은 sigprocmask()을 사용할 수 있습니다 대신 행동이 공식적으로 멀티 스레드 프로세스에 대한 정의되지 않은 있지만.

+0

내 프로그램이 멀티 스레드 프로그램이므로 sigprocmask는 쓸모가 없습니다. 하지만 어쨌든 정보 주셔서 감사합니다. – layman

+0

Android-15 또는 이전 버전에서이 기능을 사용해야하는 경우 여기에서 해결 방법이 있습니다. http://www.nadavos.com/patch-nodejs-to-run-on-android-4-04/ –

관련 문제