【发布时间】:2014-09-17 07:33:43
【问题描述】:
在调查期间,我发现 NDK 中的信号量原语实现存在一些差距。 我当前的任务需要 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 有其他想法,但我怎么知道它是正常终止还是终止?
请指教。
【问题讨论】:
-
不知何故,我怀疑如果 Android NDK 有
sem_wait(或sem_trywait),它就不会有sem_timedwait。所有这些功能在 POSIX(和 Linux)中已经存在很多年了,早在人们想到 Android 之前。您是否与manual page 中指定的-pthread标志链接? -
Linux 多年来一直拥有所有这些功能,正如您所建议的那样。但是只有最新的 NDK 有 sem_timedwait。但是我的项目规范需要早期版本的 NDK。提前致谢
标签: android c++ android-ndk pthreads semaphore