我想知道窗户提供的纤维。
假设我创建了4条纤维。
------------ thread -----------------
纤维1-纤维2-纤维3-纤维4
光纤1现在可以执行线程。
一个线程只能同时运行一根光纤。是吗?
如果一个线程终止了fibre1,那么另一个所有纤维也终止了吗?
我知道光纤是非抢占式的。然后,如果我要将光纤1切换到光纤2,除了在光纤1中调用SwitchToFiber别无选择吗?
如果我在执行某些任务期间在fibre1中调用SwitchToFiber,那么fibre1立即睡眠吗?还是完成任务后就睡觉?
光纤1到光纤4中没有共享空间?
并且没有共享空间,因此不需要锁定光纤。是吗?
我阅读了MSDN文档,但是我听不懂。所以我问这里。
答案 0 :(得分:-1)
SwitchToFiber
就像longjmp
,CreateFiber
就像setjmp
的扩展版本,分配了额外的堆栈空间。 DeleteFiber
类似于free
分配的上下文块的setjmp
。最重要的是,给予者自己什么也不做,longjmp
就像C语言goto
的扩展版本,例如与gcc的“ compute goto”扩展类似,不同之处在于它可以在跳转时切换堆栈。您可以轻松地使用setjmp
,longjmp
和某些alloca
模拟光纤(非便携式)。