【发布时间】:2019-06-01 11:23:22
【问题描述】:
我想了解window提供的光纤。
假设我创建了 4 个纤程。
------------线程------
纤维1 - 纤维2 - 纤维3 - 纤维4
^
Fiber 1 现在线程执行。
一个线程只能同时运行一个纤程。对吗?
如果一个线程终止了 fiber1,那么另一个线程的所有纤程也会终止吗?
我知道光纤是非抢占式的。那么如果我想把fiber1切换到fiber2,有没有办法只能在fiber1中调用SwitchToFiber呢?
如果我在执行某些任务期间在 Fiber1 中调用 SwitchToFiber,那么 Fiber1 会立即休眠吗?还是在完成任务后睡觉?
fiber1到fiber4没有共享空间?
而且没有共享空间,那么也就没有必要锁定光纤。对吗?
我阅读了 MSDN 文档,但有些东西我听不懂。所以我在这里问。
【问题讨论】:
-
1.是 2. 光纤不能终止,可以通过
DeleteFiber删除。这个调用不会影响另一个纤程 3. 是的,只能通过调用SwitchToFiber4. 甚至不休眠,这是不正确的,您只需将上下文切换到调用SwitchToFiber内的另一个纤程。 5. 共享空间是什么意思? -
Fiber 仅在出于某种原因需要以与 Windows 不同的方式手动调度线程时(非常不可能)才有用。大多数人从不使用它们。
-
表示共享内存。我想知道它们(光纤1到光纤4)都可以访问的内存。
-
如果他们不能同时访问共享内存,我认为没有必要锁定。这是对的吗?
标签: c++ multithreading winapi fibers