gpt4 book ai didi

c++ - 在 C++ 中使用范围自动锁定/解锁(来自 C# 背景)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:19 27 4
gpt4 key购买 nike

过去几年我一直在使用 C#,目前正在修复 C++ 中的错误。在 C# 中,我可以使用对象上的锁来使我的代码线程安全:

lock(lockObject)
{
// Do some work
}

如果 //Do some work 中出现异常,这将解锁 lockOject

C++ 中有类似的东西吗?目前我能想到的是:

// Code
{
AutoLock lock(lockObject);
// Do some work
}
// More Code

但我不喜欢花括号只是为了限定我的 AutoLock。目前我在做:

AutoLock lock(lockObject);
// Do some work
lock.Unlock();

如果 //Do some work 中出现异常,让异常展开释放锁。

我目前正在做的工作有效,但我想知道是否有更好的方法,谢谢。

最佳答案

But I don't like the curly braces just to scope my AutoLock.

这就是它在 C++ 中的完成方式。

请注意,您不需要为每个 AutoLock 设置单独的范围 block ;以下也可以:

{
AutoLock lock1;
AutoLock lock2;
// more code goes here
} // lock2 gets destroyed, then lock1 gets destroyed

它也不必是一个单独的作用域 block ;如果您在函数中锁定某些东西并且在函数返回之前不需要将其解锁,那么您可以简单地使用函数作用域来约束 lock 。同样,如果您在循环 block 中的每次迭代期间锁定某些内容,则可以使用循环的作用域 block 来限制锁定。

您在完成使用后手动解锁互斥体的方法很好,但它不是惯用的 C++,也不是很清楚。这使得找出互斥量解锁的位置变得更加困难(也许并不难,但比需要的更难)。

关于c++ - 在 C++ 中使用范围自动锁定/解锁(来自 C# 背景),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3282728/

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