将进程的执行从线程1转移到线程2

Transfer execution of a process from thread1 to thread2

本文关键字:线程 转移 进程 执行      更新时间:2023-10-16

这只是一个理论问题(甚至可能不实用(,只是出于好奇而提出的。

如何在不中断流程的情况下将流程LongComputation()的执行从ThreadProcess1()转移到ThreadProcess2()?有可能吗这里,ThreadProcess1((是时间关键的,LongComputation((也很重要,但不是时间关键的。坦率地说,我不明白如何在不破坏进程或当前线程的情况下,使用可用的c++并发工具包将正在运行的进程注入另一个辅助线程

这里有一个实际的场景:ThreadProcess1((是有时间限制的,并且发现LongComputation()花费的时间比设置的时间长。因此,它希望将此进程转移到另一个线程,但希望继续执行剩余的代码。

void LongComputation() {
/* ... */
}
void ThreadProcess1() {
/* start LongComputation()  
tranfer the incomplete LongComputation() 
to process2 for completing */
}
void ThreadProcess2() {
}

这只是我的想法,在移动设备上,无法测试。如果我错了,请把我撕成碎片。我确信这可以(假设(通过转移CPU状态来完成。即使从用户模式,也很容易。挂起t1并通过GetThreadContext获取其上下文(在Windows上(。然后对t2执行同样的操作,并使用SetThreadContext来交换状态。对于这种情况,您需要一个管理器线程,但无论如何,这都是纯粹的假设,因为它永远不会是现实世界中的最佳解决方案。所有这些真正能做的就是通过触发一个中断来设置另一个线程来恢复我们已经在执行的代码,从而减慢速度。事实上,您可能想要的是一个事件,在该事件中,如果时间过长,您可以向t2发出信号,让其为t1做一些工作。