Android上本机线程的可能状态?
在Android设备上执行本机(C/C++)线程时,所有可能的线程状态是什么?它们和我们的一样吗?它们是Linux线程吗?POSIX线程 这不是必需的,但提供了导致线程进入每种状态的示例,可以获得额外的分数 编辑:根据要求,动机如下: 我正在为一个采样分析器设计接口,该分析器在Android上使用原生C/C++代码。探查器报告将显示一段时间内的线程状态。我需要知道所有的状态是什么,以便a)知道我可能需要视觉区分多少不同的状态,b)设计一个颜色方案,视觉区分和分组理想状态和不理想状态。谷歌:Android上本机线程的可能状态?,android,c++,c,linux,multithreading,Android,C++,C,Linux,Multithreading,在Android设备上执行本机(C/C++)线程时,所有可能的线程状态是什么?它们和我们的一样吗?它们是Linux线程吗?POSIX线程 这不是必需的,但提供了导致线程进入每种状态的示例,可以获得额外的分数 编辑:根据要求,动机如下: 我正在为一个采样分析器设计接口,该分析器在Android上使用原生C/C++代码。探查器报告将显示一段时间内的线程状态。我需要知道所有的状态是什么,以便a)知道我可能需要视觉区分多少不同的状态,b)设计一个颜色方案,视觉区分和分组理想状态和不理想状态。谷歌: Th
Thread.State BLOCKED线程被阻塞并等待锁定。
线程。状态新线程已创建,但从未启动。
Thread.State RUNNABLE线程可能正在运行。
Thread.State TERMINATED线程已终止。
Thread.State TIMED_WAITING线程正在等待指定的时间量。
线程正在等待的状态。
这些状态没有得到很好的解释——例如,我看不出阻塞和等待之间的区别
有趣的是,没有“运行”状态——这些设备有没有做过任何事情 我听说Android上的本机线程只是轻量级进程。这与我发现的Linux总体上是一致的。引述: Linux机器上的进程(包括线程)可以处于以下任何状态:
-进程正在CPU上执行或等待执行任务\u正在运行
-进程暂停(休眠),直到某些条件变为真。引发硬件中断、释放进程正在等待的系统资源或传递信号都是可能唤醒进程(将其状态恢复为TASK_RUNNING)的条件的示例。通常,阻塞IO调用(磁盘/网络)将导致任务被标记为任务可中断。一旦等待的数据准备好读取,设备就会发出一个中断,中断处理程序将任务的状态更改为“任务可中断”。处于空闲模式(即不执行任何任务)的进程也应处于此状态任务可中断
与任务不可中断
类似,但向休眠进程发送信号时其状态保持不变。很少使用此过程状态。然而,在某些特定条件下,它是有价值的,在这些条件下,进程必须等待给定事件发生而不被中断。理想情况下,不会有太多任务处于这种状态。任务不可中断
- 例如,当进程打开设备文件并且相应的设备驱动程序开始探测相应的硬件设备时,可以使用该状态。在探测完成之前,不得中断设备驱动程序,否则硬件设备可能处于不可预测的状态
- 原子写入操作可能需要将任务标记为
不可中断
- NFS访问有时会导致访问进程被标记为不可中断 这样,从磁盘读取/写入磁盘的时间可以标记为几分之一秒
- 页面错误后的I/O标记进程不可中断
- 由于页面错误而访问的同一磁盘的I/O可能会导致标记为
不可中断的进程
- 程序员可以将任务标记为
,而不是使用不可中断
可中断
-进程执行已停止;进程在接收到任务\u已停止
、SIGSTOP
、SIGTSTP
或SIGTTIN
信号后进入此状态sigtou
-调试器已停止进程执行任务\u跟踪
-进程执行已终止,但父进程尚未发出EXIT\u ZOMBIE
或wait4()
系统调用。在父进程发出类似于waitpid()
的调用之前,操作系统不会清除僵尸进程wait()
-最终状态:该进程正在被系统删除,因为父进程刚刚对其发出了EXIT\u DEAD
或wait4()
系统调用。将其状态从waitpid()
更改为EXIT_ZOMBIE
可以避免由于在同一进程上执行类似于调用的EXIT_DEAD
的其他执行线程而导致的争用情况wait()
正在运行
(正在执行或准备执行)2-
睡眠
(在Thread.sleep()中)3-
监视器
(监视器锁上被阻止)4-
等待
(在Object.wait()中)5-
初始化
6-
启动
7-
本机
(执行本机代码)8-
vmwait
(等待虚拟机资源)
如果线程正在运行,“suspended”[数据结构中的一个单独标志]将为0,否则为1
如果您设计的系统应用程序必须以比普通应用程序更高级的方式使用线程,那么我首先要检查Android上有哪些API可用于访问线程 答案是pthread=POSIX threads,带有pthread.h头文件,在Bionic C库中实现。所以你已经开始了