Android NDK pthread上下文切换

时间:2014-03-04 23:22:15

标签: c++ android-ndk posix

根据我的理解pthread_yield()sched_yield(),上下文切换pthread的正确方法分别在使用NDK时不可用/无效。

编辑:这真的是sched_yield()吗? ftp://sourceware.org/pub/pthreads-win32/sources/pthreads-w32-2-9-1-release/sched_yield.c

EDIT2 :(回应前两条评论) 克里斯: 找到了这个来源。它在ASM中,不确定它的作用。 http://code.google.com/p/android-source-browsing/source/browse/libc/arch-arm/syscalls/sched_yield.S?repo=platform--bionic&r=7582a9c119a4e4d0c306996b2513205889a9fb6c

ENTRY(sched_yield)
mov ip, r7
ldr r7, =__NR_sched_yield
swi #0
mov r7, ip
movs r0, r0
bxpl lr
b __set_syscall_errno
END(sched_yield)

(EDIT2A:刚刚发现了这个:https://android.googlesource.com/platform/external/pthreads/+/master/sched_yield.c 也使用Sleep (0);。)

我是android / linux的新手。我会用android libs编译在没有android linux上获得相同的结果吗?就像'strace'建议一样,没有它的主管。

法登: 我正在将多线程c ++应用程序移植到android / ndk。它使用需要共享cpu时间的多个线程,因为它们可以相互阻塞,因此死锁是一个非常现实的可能性需要防止(层次结构,不是问题,api /系统调用正在做他们想要的) 。使用“睡眠”作为解决方法似乎会给我带来不可预测的行为,并且会使cpu周期变得昂贵。

1 个答案:

答案 0 :(得分:1)

sched_yield()可用于Android NDK(在所有支持的平台上)。 只需包含< sched.h>在使用它之前,就像常规的Posix系统一样。