c/c ++可以在单个线程中执行preemeptive多任务处理吗?

Wil*_*ill 6 c c++ thread-safety green-threads

C/C++中的抢先式多任务处理:某个计时器是否可以中断正在运行的线程并在任务之间切换?

使用绿色线程等的许多VM和其他语言运行时以这些术语实现; C/C++应用程序可以做同样的事情吗?

如果是这样,怎么样?

这将取决于平台,因此请根据特定平台对此的支持进行讨论; 例如,如果你有一些魔法可以SIGALRM在Linux上的处理程序中交换某种内部堆栈(也许使用longjmp?),那就太好了!


我问,因为我很好奇.

我已经工作了几年制作异步IO循环.在编写异步IO循环时,我必须非常小心,不要将昂贵的计算计算放入循环中,因为它会使DOS循环.

因此,我对可以采用异步IO循环以恢复甚至完全支持某种绿色线程或此类方法的各种方式感兴趣.例如,对活动任务进行采样和a中的循环迭代次数SIGALRM,然后如果检测到任务阻塞,则将其他所有内容移动到新线程,或者对此具有所需结果的一些狡猾变化.

最近在这方面有一些关于node.js的抱怨,而在其他地方,我看到过关于Go和Haskell等其他运行时的诱人评论.但是,让我们离开基本问题,你是否可以在C/C++中的单个线程中执行抢占式多任务处理

Den*_*s K 3

Windows 的纤程是用户调度的共享同一线程的执行单元。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms682661%28v=vs.85%29.aspx

UPD:有关用户计划上下文切换的更多信息可以在 LuaJIT 源代码中找到,它支持不同平台的协程,因此即使您根本不使用 lua,查看源代码也很有用。这是摘要: http: //coco.luajit.org/portability.html