jmpbuf
的全称其实是 jump buffer,存储的是 longjump
函数所需要的信息。也就是协程的上下文。由于 jmpbuf
在不同的平台内部实现不一样,而且如果 glibc
后面版本如果改变了 jmpbuf
的内存布局,就不能用了。
所以 SRS 为了保证系统的 鲁棒性 跟 扩展性,自己定义了 jmpbuf
的结构。如下:
原来 1.9 版本的 StateThreads
的 jmpbuf
是使用的 setjmp.h
里面的定义,如下:
我们再看回来 common.h
头文件里面的 struct _st_thread
结构,会发现 context
字段的结构已经变了。
推荐阅读《掀起你的汇编来:如何移植ST协程到其他系统或CPU?》
本文是《SRS原理》一书中的文章,如需观看更多内容,请购买本书。