DPC會被分配到不停的CPU核心上,如果分配到同一個核心,那么DPC是串行的,如果分配到不同的CPU核心上,那么DPC是并行的,但如果設置WDF_OBJECT_ATTRIBUTES的SynchronizationScope屬性為WdfSynchronizationScopeDevice,那么即便CPU有多核,DPC也不會在不同的核心上并發,因為系統加鎖進行同步保護了,也就是說設置 WdfSynchronizationScopeDevice后,那些回調函數不會并發執行,只會串行執行。當一個CPU在執行DPC時,另一個CPU中的DPC是拿不到鎖的,因此不會被執行。
// Initialize FDO Attributes and create our device objectWDF_OBJECT_ATTRIBUTES fdo_attr;WDF_OBJECT_ATTRIBUTES_INIT(&fdo_attr);WDF_OBJECT_ATTRIBUTES_SET_CONTEXT_TYPE(&fdo_attr, your_device_extension); // Specify a context for DeviceObject.// Set the Synchronization scope to device so that only one event callback for this is executing at anytime. // This eliminates the need to hold any lock to synchronize access to device extension. fdo_attr.SynchronizationScope = WdfSynchronizationScopeDevice;// Context Cleanup will be called