Phr*_*ogz 9 c c++ linux multithreading android
在Android设备上执行本机(C/C++)线程时,所有可能的线程状态是什么?它们与Java线程状态相同吗?他们是Linux线程吗?POSIX线程?
不是必需的,而是提供可以导致线程进入每个状态的示例的奖励积分.
编辑:根据要求,这是动机:
我正在设计一个采样分析器的接口,该接口分析器可以在Android上使用本机C/C++代码.探查器报告将随时间显示线程状态.我需要知道所有状态是什么,以便a)知道我将需要多少不同的状态可能在视觉上区分,以及b)设计一种颜色方案,在视觉上区分和分组所需状态与不良状态.
我被告知Android上的原生线程只是轻量级进程.这与我在Linux上发现的一般情况一致.引用此Wiki页面:
Linux机器上的进程(包括线程)可以处于以下任何状态:
TASK_RUNNING- 该进程要么在CPU上执行,要么等待执行.TASK_INTERRUPTIBLE- 该过程暂停(休眠),直到某些条件成立为止.引发硬件中断,释放进程正在等待的系统资源或发送信号是可能唤醒进程的条件示例(将其状态恢复为TASK_RUNNING).通常,阻止IO调用(磁盘/网络)将导致任务标记为TASK_INTERRUPTIBLE.一旦等待的数据准备好被读取,设备就会产生中断,中断处理程序将任务状态改为TASK_INTERRUPTIBLE.空闲模式下的进程(即不执行任何任务)也应处于此状态.TASK_UNINTERRUPTIBLE- 比如TASK_INTERRUPTIBLE,向睡眠过程发送信号使其状态保持不变.这种过程状态很少使用.然而,在某些特定条件下,进程必须等到给定事件发生而不被中断,这是有价值的.理想情况下,没有太多任务会处于这种状态.
- 例如,当进程打开设备文件并且相应的设备驱动程序开始探测相应的硬件设备时,可以使用该状态.在探测完成之前,不得中断设备驱动程序,否则硬件设备可能处于不可预测的状态.
- 原子写操作可能需要将任务标记为
UNINTERRUPTIBLE- NFS访问有时会导致访问进程被标记为
UNINTERRUPTIBLE从/向磁盘的读/写可以标记为几分之一秒- 页面错误后的I/O标记了一个进程
UNINTERRUPTIBLE- 由于页面错误而访问的同一磁盘的I/O可能导致标记为的进程
UNINTERRUPTIBLE- 程序员可以将任务标记为
UNINTERRUPTIBLE而不是使用INTERRUPTIBLETASK_STOPPED- 流程执行已停止; 该过程接收后进入此状态SIGSTOP,SIGTSTP,SIGTTIN,或SIGTTOU信号.TASK_TRACED- 调试器已停止进程执行.EXIT_ZOMBIE- 流程执行终止,但父进程尚未发出wait4()或waitpid()系统调用.在父发出类似wait()调用之前,操作系统不会清除僵尸进程.EXIT_DEAD-最后的状态:正在被系统移除的过程中,因为父进程刚刚发布的wait4()或waitpid()系统调用它.改变其状态EXIT_ZOMBIE以EXIT_DEAD避免由于执行的其他执行线程而导致的竞争条件wait()- 类似于在同一进程上调用.
编辑:但Dalvik VM Debug Monitor提供了不同的状态.从其文件:
"线程状态"必须是以下之一:
1 -
running(现在正在执行或准备这样做)
2 -sleeping(在Thread.sleep()中)
3 -monitor(在监视器锁定时被阻止)
4 -waiting(在Object.wait()中)
5 - 6 - 7 - (执行本机代码) ) 8 - (等待VM资源)initializingstartingnativevmwait如果线程正在运行,"暂停" [数据结构中的单独标志]将为0,否则为1.