我目前正在开发一个并发库,用于使用绿色线程C++,使用工作窃取在多个硬件线程上的调度程序之间进行负载平衡。
我已将主上下文固定到其硬件线程,这意味着它不会被窃取,因此可以迁移到其他硬件线程。
我相信我已经在某处读到过这篇文章,如果被盗并在不同硬件线程中返回(退出(的主要上下文是未定义的行为。但是,我现在似乎找不到任何来源。
这是未定义的行为吗?引用来源将是完美的。
首先,标准C++中没有绿色线程。因此,制作自己的堆栈并替换它们的整个事情是未定义的行为。UB并不意味着某些东西不起作用。这意味着不能保证它可以在任何符合标准的系统上工作。
绿色线程/协程在 UB 的边缘进行平衡,为每个受支持的平台进行实现。它们之所以工作,是因为它们是为特定平台编写的,并且很难克服这些平台上的不同坑。