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

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

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

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

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

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

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

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

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2019-2024 kier Val
  • Visitors: | Views: