【问题标题】:State of a thread after it is terminated线程终止后的状态
【发布时间】:2021-09-07 10:44:30
【问题描述】:

使用“osThreadTerminate”函数终止线程时处于何种状态?

函数如下:

void High_Thread(void const *argument)
{
  while(1)
  {
   GPIOE->DOUT_BYTE=0xFF;
   osThreadTerminate(ThreadId_high
  }
}

【问题讨论】:

  • ??不再存在的东西怎么会有状态?你的问题没有意义:(
  • 最好说出你想要归档的内容
  • 有一个关于任务的问题,它询问线程在调用“osThreadTerminated”后处于什么状态。然后有以下状态:“未创建、运行、就绪、等待、非活动、暂停”。其中之一就是答案
  • @MartinJames,您假设“线程”在终止后不再存在。我不会。 OP 似乎在询问 CMSIS-RTOS。我不知道 CMSIS,但是即使在句柄所代表的东西“终止”(或“过期”)之后,像线程之类的东西的 句柄 也有充分的理由继续存在或“关闭”......)通常,很好的理由只是让程序可以询问状态。想想 Unix 进程,其中“已终止”进程继续作为“僵尸”存在,直到其父进程明确 wait()s 以获取其终止状态。

标签: c multithreading rtos cmsis


【解决方案1】:

它是 CMSIS 实时操作系统。线程是不返回的简单函数。当您删除线程时(我认为在这种情况下更好的名称是任务),任务堆栈和 TCB(任务控制块)正在从 RTOS 堆中删除。

被移除的任务不存在,也没有处于任何状态。任务代码不会更改,因为它驻留在非易失性存储器(FLASH)中

phthreads 与 CMSIS RTOS 没有任何共同点,我已删除此标签。

【讨论】:

  • 是不是说一个线程结束后就没有状态了?但是根据任务应该有一个:D 其中之一:Not Created, Running, Ready, Waiting, Inactive, Suspend
  • 非活动状态表示任务不存在。
  • 也是线程终止后处于非活动状态吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多