1

我目前正在开发一个带有绿色线程的 C++ 并发库,它使用工作窃取来实现多个硬件线程上的调度程序之间的负载平衡。

我已将主上下文固定到其硬件线程,这意味着它不能被盗,因此无法迁移到其他硬件线程。

我相信我已经在某处读到过这篇文章,如果主上下文被盗并在不同的硬件线程中返回(退出)来自它的起源是未定义的行为。但是,我现在似乎找不到任何来源。

这是未定义的行为吗?引用来源将是完美的。

4

1 回答 1

1

首先,标准 C++ 中没有绿色线程。因此,制作自己的堆栈并替换它们的整个过程是未定义的行为。UB 并不意味着某些东西不起作用。这意味着不能保证它可以在任何符合标准的系统上运行。

绿色线程/协程在 UB 的边缘进行平衡,为每个支持的平台实现。它们之所以起作用,是因为它们是为特定平台编写的,并且具有克服这些平台上不同陷阱的能力。

于 2017-05-14T20:42:43.467 回答