ST源码分析-中断处理 - 弦外之音

/ 0评 / 0

ST 库的协程阻塞函数如下:

如上图,阻塞函数 st_poll()st_usleep()st_mutex_lock() 等等,这些函数的返回值都有可能是 -1,被中断了。本文主要讲解这样中断什么情况会发生。请看下图:

如上图所示,每个阻塞函数,都是在 _ST_SWITCH_CONTEXT() 之后判断一下 协程的 flags 有没 _ST_FL_INTERRUPT(中断) 标志。那这个 _ST_FL_INTERRUPT 是在什么地方打上去的呢?下面就来详细分析一下。

只有一个地方对 flags 添加 _ST_FL_INTERRUPT 标记,就是 st_thread_interrupt() 函数,如下:

st_thread_interrupt() 的代码比较简单,其实就是 打上 _ST_FL_INTERRUPT 标记,然后把 协程 状态改成 _ST_ST_RUNNABLE

ST 没有任何一个地方使用了 st_thread_interrupt() 函数,这个函数是ST库留给程序员自己用的,如果你想中断某个协程,不再等待,就可以调这个函数。把协程传进去这个函数就行了。


相关阅读:

  1. 《ST库阻塞函数大全》

由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。QQ:2338195090。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注