gpt4 book ai didi

c++-cli - 可以为 .Net Monitor::Enter/Exit 实现 RAII(在 C++ CLI 中)

转载 作者:行者123 更新时间:2023-12-04 00:45:19 25 4
gpt4 key购买 nike

被迫 :( 在 C++ CLI 中工作我正在寻找一种方法来进行 RAII 锁定。我想到的是:

ref class RAIIMonitor
{
RAIIMonitor();
T^ t;
public:
RAIIMonitor(T^ t_)
{

t=t_;
System::Threading::Monitor::Enter(t_);
}
~RAIIMonitor()
{
System::Threading::Monitor::Exit(t);
}
!RAIIMonitor()
{
assert(0); // you are using me wrong
}
};

用法:

 //begining of some method in MyRefClass
RAIIMonitor<MyRefClass> monitor(this);

那么这是正确的方法吗,如果不正确,有没有更好的方法?

最佳答案

Microsoft 提供了一个类来执行此操作。 #include <msclr/lock.h> ,并查看锁类。将其与堆栈语义相结合,您将获得 RAII 锁定。

对于简单的用例,只需将锁​​定对象声明为局部变量,然后传入要锁定的对象即可。当通过堆栈语义调用析构函数时,它会释放锁。

void Foo::Bar()
{
msclr::lock lock(syncObj);
// Use the protected resource
}

锁类还提供Acquire , TryAcquire , 和 Release方法。有一个构造函数可用于不立即执行锁定,而是稍后锁定,您自己调用 Acquire 或 TryAcquire。

(如果您查看实现,您会发现它是您开始使用 RAIIMonitor 类的完整实现。)

关于c++-cli - 可以为 .Net Monitor::Enter/Exit 实现 RAII(在 C++ CLI 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306486/

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