当前位置: 首页 > news >正文

八、任务状态

1、任务状态简介

(1)任务状态可以简单的分为运行和非运行。

(2)非运行状态可以细分为:阻塞状态、暂停状态、就绪状态。

2、阻塞状态(Blocked)

(1)举例说明:在日常生活的例子中,母亲在电脑前跟同事沟通时,如果同事一直没回复,那么母亲的工作就被卡住了、被堵住了、处于阻塞状态(Blocked)。重点在于:母亲在等待。

(2)任务要等待某个事件,事件发生后它才能运行,在等待事件的过程中,这个任务就处于阻塞状态(Blocked)。

(3)阻塞状态的任务不消耗CPU资源。

(4)在阻塞状态的任务,它可以等待两种类型的事件:时间相关的事件或同步事件。

(5)时间相关的事件

  • 可以等待一段时间:我等2分钟
  • 也可以一直等待,直到某个绝对时间:我等到下午3点

(6)同步事件:这事件由别的任务,或者是中断程序产生

  • 例子1:任务A等待任务B给它发送数据
  • 例子2:任务A等待用户按下按键

(7)同步事件的来源有很多,如下所示。

  • 队列(queue)
  • 二进制信号量(binary semaphores)
  • 计数信号量(counting semaphores)
  • 互斥量(mutexes)
  • 递归互斥量、递归锁(recursive mutexes)
  • 事件组(event groups)
  • 任务通知(task notifications)

(8)在等待一个同步事件时,可以加上超时时间。比如等待队里数据,超时时间设为10ms:

  • 10ms之内有数据到来:成功返回
  • 10ms到了,还是没有数据:超时返回

3、暂停状态(Suspended)

(1)举例说明:在日常生活的例子中,母亲正在电脑前跟同事沟通,母亲可以暂停:

  • 好烦啊,我暂停一会。
  • 领导说:你暂停一下。

(2)FreeRTOS中的任务也可以进入暂停状态,唯一的方法是通过vTaskSuspend函数。函数原型如下:

/**参数xTaskToSuspend表示要暂停的任务;*如果为NULL,表示暂停自己。*/
void vTaskSuspend( TaskHandle_t xTaskToSuspend );

(3)要退出暂停状态,只能由别的任务或中断程序来操作。

  • 别的任务调用:vTaskResume
  • 中断程序调用:xTaskResumeFromISR

(4)实际开发中,暂停状态用得不多。

4、就绪状态(Ready)

(1)这个任务完全准备好了,随时可以运行:只是还轮不到它。这时,它就处于就绪态(Ready)。

(2)刚创建的任务就处于就绪状态。

5、完整的任务状态转换图


 

http://www.lryc.cn/news/157337.html

相关文章:

  • 基于python的反爬虫技术的研究设计与实现
  • msvcr120.dll放在哪里?怎么修复msvcr120.dll文件
  • Ubuntu搭建NFS服务
  • PHP教学质量评估系统Dreamweaver开发mysql数据库web结构php编程计算机网页代码
  • ElementUI浅尝辄止15:Table 表格
  • 配置LVS_DR模式以及nginx负载均衡
  • 虚拟数字人直播软件实现带货功能,成为新一代直播风口!
  • 01背包问题暴力解法(回溯法)和经典解法
  • K8S的CKA考试环境和题目
  • docker清理
  • 队列和栈两种数据结构的区别和Python实现
  • java 企业工程管理系统软件源码+Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis
  • 使用Smartctl脚本输入当前所有磁盘的状态
  • 数学建模之插值法
  • rhcsa学习2(vim、创建管理用户、组等)
  • 【使用教程】Github(自用)
  • typeScript学习笔记(一)
  • 第4章:网络层
  • C高级day1 shell 指令的补充学习
  • 灰度变换与空间滤波
  • 敏感接口权限校验
  • [LeetCode周赛复盘] 第 112场双周赛20230903
  • Spark【RDD编程(二)RDD编程基础】
  • 【2023最新版】MySQL安装教程
  • 关于mysql数据文件损坏导致的mysql无法启动的问题
  • 深度学习之视频分类项目小记
  • pandas(四十三)Pandas实现复杂Excel的转置合并
  • 42、springboot 的 路径匹配 和 内容协商
  • 一文讲解Linux内核内存管理架构
  • 教你如何使用API接口获取数据