《编译、链接与装载》笔记(3)reentrant、yield return底层机制

发布于 2021-09-07  55 次阅读


之前在做C#开发时,了解了一些简单的同协和协程,后来了解到python当中也有,当时不能很好理解那个枚举类,这里补一个笔记

(写完了发现C语言 C# python当中的实现几乎完全不同,有点惊讶)

python的方法是,任何含yield的函数会被标记为类似匿名生成器的东西,是解释器层面的

C#的方法是继承出一个类似python生成器的东西,然后由编译器加上MoveNext() 成员函数,用state变量标记执行的位置:这时编译器层面操作的语法糖,如果我们去手写的话,也完全可以实现

而C语言的reentrant是更底层的,它可以认为是CPU层面的,需要满足下列条件:

不使用,不返回任何非const变量或指针,不依赖任何单个资源的锁,不二次调用任何非reentrant的函数

reentrant函数是在保证高效性的前提下(不使用任何锁,不需要等待,十分高效),多线程下最安全的做法