2014-09-17 4 views
0

조사 중에 NDK의 Semaphore 프리미티브 구현에 몇 가지 차이가 ​​있음을 발견했습니다. 현재 작업에 sem_timedwait (예 : sem_wait과 마찬가지로 timeout)이 필요하지만 NDK에서는 찾을 수 없습니다. 한 가지 더 중요한 점은 코드가 iOS 플랫폼에서 이식 가능해야한다는 것입니다. Android와 함께 sem_timedwait NDK

내 현재 제안 :

1 단계 :

2 단계 sem_wait와 별도의 스레드를 생성 (thrd_id1) (영원히 거기에 붙어 있습니다, sem_post 때까지 기다립니다) : 만들기 별도의 스레드 (thrd_id2)와 잠에서 잠시 후 우리가 깨울 때

3 단계 : 우리가 계기가되면은 (thrd_id2는) 그렇지 않으면 sem_wait 다른 스레드에서 sem_post 잠금을 해제, 성공 반환 ETIMEOUT의 경우, sem_wait (thrd_id1)와 스레드를 취소하려고합니다. 그러나 pthread의 NDK 구현에는 취소 가능 스레드가 없습니다.

pthread_kill으로 다른 아이디어가 있습니까?하지만 정상적으로 종료되었거나 종료되었다는 것을 어떻게 알 수 있습니까?

알려 주시기 바랍니다.

+0

어쨌든 나는 안드로이드 NDK가 ['sem_wait']을 가지고 있다면 (''sem_timedwait'') (http://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_timedwait.html) //pubs.opengroup.org/onlinepubs/9699919799/functions/sem_wait.html) (또는 ['sem_trywait'] (http://pubs.opengroup.org/onlinepubs/9699919799/functions/sem_trywait.html)). 안드로이드가 생각하기 오래 전부터이 모든 기능은 수년 동안 POSIX (및 Linux)에있었습니다. [manual page] (http://man7.org/linux/man-pages/man3/sem_timedwait.3.html)에 명시된대로'-pthread' 플래그로 링크합니까? –

+0

리눅스는 당신이 제안한 것처럼 수년간이 모든 기능을 갖추고 있습니다. 그러나 최신 NDK에는 sem_timedwait 만 있습니다. 그러나 프로젝트의 사양에는 이전 버전의 NDK가 필요합니다. 미리 감사드립니다. –

답변

0

sem_timedwait은 적어도 r9d (이전 버전이 없음) - 확인 platforms/android-%yourplatform%/arch-%yourarch%/usr/include/semaphore.h에서 Android NDK에 있습니다.

최신 NDK로 전환 할 수없는 경우, just take GNU implementation으로 알려 주시기 바랍니다.

+0

프로젝트 사양에 이전 버전의 NDK가 필요하므로 직접 구현하려고합니다. 어쨌든 미리 감사드립니다. –

+0

@OleksandrHryhorchuk NDK의 이전 버전을 사용하는 이유는 무엇입니까? 최신 NDK 버전은 API 3 (Android 1.5)부터 시작하는 모든 Android 플랫폼을 지원합니다. –

+0

이것은 보안 프로젝트로서 모든 도구와 SDK 업데이트는 고객이 승인했으며이 질문에 그렇게 용감하지 않습니다. –

관련 문제