我目前正在使用绿色线程的C ++并发库,使用工作窃取来在多个硬件线程上的调度程序之间进行负载平衡。
我已将主要上下文固定到其硬件线程,这意味着它不会被盗,因此会迁移到其他硬件线程。
我相信我已经在某个地方读过这样的内容:如果主要上下文被盗并在不同的硬件线程中返回(退出),那么它就是未定义的行为。但是,我现在似乎无法找到任何消息来源。
这是未定义的行为吗?引用来源将是完美的。
答案 0 :(得分:1)
首先,标准C ++中没有绿色线程。因此,制作自己的堆栈并替换它们的全部内容是未定义的行为。 UB并不意味着某些东西不起作用。这意味着无法保证它可以在任何符合标准的系统上运行。
绿色线程/协同程序在UB的边缘平衡,为每个支持的平台实现。他们的工作原因是因为他们是为特定平台编写的,并且有克服这些平台上不同的陷阱。