在调查过程中,我发现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 有另一个想法,但我怎么知道它被杀死或正常终止?
请指教。
答案 0 :(得分:0)
sem_timedwait
版本r9d
(我没有早期版本) - 请检查platforms/android-%yourplatform%/arch-%yourarch%/usr/include/semaphore.h
。
如果无法选择切换到较新的NDK,我会建议您just take GNU implementation。