在基于NT的Windows操作系统中是否存在APC或其他技术的变体,它会强制特定线程立即调用特定用户函数(或者至少中断用户代码),而无需等待线程进入可警告的等待?
我意识到这会导致各种并发问题。我想用它的主要目标是从另一个线程强制处理器级别的内存屏障(并等待完成) - 其他方法实现这一点会有所帮助,但我仍然很好奇,如果这是可能的: )
答案 0 :(得分:2)
你可以做到,但它并不漂亮。由于线程没有预料到这一点,因此您可以调用的内容非常有限。例如,您将无法调用任何使用任何同步API的内容。
如果您仍想这样做 - SuspendThread
,GetThreadContext
,SetThreadContext
和ResumeThread
将允许您模拟函数调用。您必须保留所有寄存器,包括标志。
显然,这需要特定于平台的代码。另请注意,某些用户模式代码会触及堆栈指针上方的位置,因此您可能需要为推送的返回地址添加一些边距。
答案 1 :(得分:1)
不,因为这通常违反了另一个线程所持有的假设。另一个线程必须假设它可以被内核中断,是的,但不是用户模式代码更改进程工作集。