使用Android NDK的sem_timedwait

时间:2014-09-17 07:33:44

标签: android c++ android-ndk pthreads semaphore

在调查过程中,我发现NDK中的Semaphore原语实现存在一些差距。 我当前的任务需要 sem_timedwait (就像sem_wait只是超时),但我在NDK中找不到它。 更重要的是:代码应该可以在iOS平台上移植。

我目前的建议:

步骤1:使用sem_wait创建单独的线程( thrd_id1 )(等到sem_post,可以永久停留在那里)

第2步:创建单独的线程( thrd_id2 ),并在几秒钟内唤醒,当我们醒来时

第3步:当我们被唤醒( thrd_id2 )时,尝试使用sem_wait( thrd_id1 )取消线程,以便成功返回 ETIMEOUT ,否则sem_wait将被另一个线程的sem_post解锁。 但是,pthread的NDK实现没有可取消的线程。

pthread_kill 有另一个想法,但我怎么知道它被杀死或正常终止?

请指教。

1 个答案:

答案 0 :(得分:0)

Android NDK中至少有sem_timedwait版本r9d(我没有早期版本) - 请检查platforms/android-%yourplatform%/arch-%yourarch%/usr/include/semaphore.h

如果无法选择切换到较新的NDK,我会建议您just take GNU implementation