我对窗户中的纤维有一些疑问

时间:2019-01-06 16:20:26

标签: c++ multithreading winapi fibers

我想知道窗户提供的纤维。

假设我创建了4条纤维。

------------ thread -----------------

纤维1-纤维2-纤维3-纤维4

^

光纤1现在可以执行线程。

  1. 一个线程只能同时运行一根光纤。是吗?

  2. 如果一个线程终止了fibre1,那么另一个所有纤维也终止了吗?

  3. 我知道光纤是非抢占式的。然后,如果我要将光纤1切换到光纤2,除了在光纤1中调用SwitchToFiber别无选择吗?

  4. 如果我在执行某些任务期间在fibre1中调用SwitchToFiber,那么fibre1立即睡眠吗?还是完成任务后就睡觉?

  5. 光纤1到光纤4中没有共享空间?

  6. 并且没有共享空间,因此不需要锁定光纤。是吗?

我阅读了MSDN文档,但是我听不懂。所以我问这里。

1 个答案:

答案 0 :(得分:-1)

SwitchToFiber就像longjmpCreateFiber就像setjmp的扩展版本,分配了额外的堆栈空间。 DeleteFiber类似于free分配的上下文块的setjmp。最重要的是,给予者自己什么也不做,longjmp就像C语言goto的扩展版本,例如与gcc的“ compute goto”扩展类似,不同之处在于它可以在跳转时切换堆栈。您可以轻松地使用setjmplongjmp和某些alloca模拟光纤(非便携式)。