将进程的执行从线程1转移到线程2
Transfer execution of a process from thread1 to thread2
这只是一个理论问题(甚至可能不实用(,只是出于好奇而提出的。
如何在不中断流程的情况下将流程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
做一些工作。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 将进程的执行从线程1转移到线程2
- 是否可以将线程执行转移到另一个线程?
- 互斥锁的所有权不会转移到另一个线程
- 提升thread_group将unique_ptr的所有权转移到线程
- 如何转移线程以将消息发送到新窗口