APC执行上下文问题?

时间:2010-01-01 12:44:03

标签: asynchronous multithreading

当发生异步过程调用(APC)时,它将“异步”执行到线程的当前上下文。根据此MSDN信息:APC

现在我的问题是,它究竟是什么意思'与当前线程的上下文异步执行'?除了线程已在执行之外,它是执行还是线程被中断以首先执行APC然后继续其工作?

据我所知,处理器不能“真正”同时做两件事。除非我在这里完全误解了“异步”概念。

有人可以提供解释或解释链接吗?

2 个答案:

答案 0 :(得分:2)

线程必须处于警报状态才能运行用户模式APC。

当用户模式APC排队时,除非它处于警报状态,否则不会将其排队的线程调用APC功能。

线程在调用SleepEx, SignalObjectAndWait, MsgWaitForMultipleObjectsEx, WaitForMultipleObjectsEx, or WaitForSingleObjectEx函数时进入可警告状态。如果在APC排队之前满足等待,则线程不再处于可警告的等待状态,因此不会执行APC功能。但是,APC仍然排队,因此当线程调用另一个可警告的等待函数时,将执行APC函数。

异步执行到当前线程的上下文意味着 当线程调用可警告的等待功能并切换到可警告状态时,将执行APC功能。

我建议你阅读

Windows via C/C++, Fifth Edition 
Chapter 10 - Synchronous and Asynchronous Device I/O 

答案 1 :(得分:0)

这是一个更普遍的问题。如果计算机不能同时执行多项操作,您认为计算机如何处理多任务处理?确实,在任何给定的时刻,它可能只做一件事,但每个任务(无论是运行Web浏览器还是执行您的APC线程)都是时间分片并在处理器上同时执行。它们似乎是在同一时间执行,尽管它们实际上是在处理器上交错的。

当然,如果你有多个内核,就像现在大多数机器一样,它们真的可以同时执行很多东西。