gpt4 book ai didi

c++ - 在 DPC 中使用唯一锁

转载 作者:行者123 更新时间:2023-12-02 10:22:17 29 4
gpt4 key购买 nike

目前正在研究 NDIS 堆栈中的轻量级过滤器。我正在尝试注入(inject)一个在全局变量中设置为 NBL 的数据包。在接收 NBL 期间,如果注入(inject)的 NBL 处于未决状态,则线程会在提取注入(inject)的 NBL 以处理它之前获取锁。最初我正在考虑使用自旋锁或 FAST_MUTEX。但是根据 FAST_MUTEX 的文档,任何其他试图获取锁的线程都将等待锁释放后再继续。

问题是,接收 NBL 是在 DPC 模式下运行的。这将导致 DPC 运行线程暂停并等待锁释放。此外,我希望能够断言线程对锁的所有权。

我的问题是,Windows 内核是否支持内核中唯一的互斥锁,这些锁是否可以在 DPC 模式下使用,以及锁中所有权的断言有多昂贵。我对 C++ 还很陌生,所以请原谅任何语法错误。

我试图在 LWF 对象中定义一个互斥锁

// Header file

#pragma once
#include <mutex.h>

class LWFobject
{
public:
LWFobject()
std::mutex ExampleMutex;
std::unique_lock ExampleLock;
}

//=============================================
// CPP file
#include "LWFobject.h"

LWFobject::LWFObject()
{
ExmapleMutex = CreateMutex(
NULL,
FALSE,
NULL);
ExampleLock(ExampleMutex, std::defer_lock);
}

内核是否支持使用 unique_locks?当我尝试编译它时,它会在尝试使用 mutex.h 时引发数百个编译错误。我想使用 try_lockowns_lock .

最佳答案

在 Windows 内核中不能使用标准 ISO C++ 同步机制。

Windows 内核本身就是一个完全不同的世界,它要求你遵守它的规则(这些规则非常庞大——例如,参见这两本 700 页的书:12)。

Windows 内核中的处理主要是异步的和基于事件的;您处理事件并安排延迟调用或使用其他 synchronization techniques 来完成以后需要完成的工作。

话虽如此,在 Windows 驱动程序中可以有传统意义上的互斥锁。它被称为 Fast Mutex 并且需要将 IRQL 提升到 APC_LEVEL。然后,您可以使用 ExAcquireFastMutexExTryToAcquireFastMutexExReleaseFastMutex 之类的调用来锁定/尝试锁定/释放它。

关于c++ - 在 DPC 中使用唯一锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59584649/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com