gpt4 book ai didi

c++ - 你能在同一个 block 中的互斥体 lock_guard 之前有代码吗

转载 作者:太空狗 更新时间:2023-10-29 19:55:59 27 4
gpt4 key购买 nike

所以,这可能是一个显而易见的答案,但我只是有疑问,因为我没有看到它被使用过......

因此,通过正常的互斥使用,您可以:

void func1()
{
mymutex.lock();
// do func1 stuff on shared data
mymutex.unlock();
}

void func2()
{
func1(); // also uses mymutex

mymutex.lock();
// do func2 stuff on shared data
mymutex.unlock();
}

我们可以很容易地看到互斥部分的开始/结束。

但是使用 lock_guard 你能做同样的事情吗,即:

void func1()
{
std::lock_guard<std::mutex> g(mymutex);
// do func1 stuff on shared data
}

void func2()
{
func1(); // also uses lock_guard on mymutex

std::lock_guard<std::mutex> g(mymutex);
// do func2 stuff on shared data
}

这里,我怀疑你通常使用 lock_guard 来保护一个完整的 c++ block 。但在 func2 中,我首先调用 func1(它本身使用相同的互斥体),然后在相同 block 中调用 lock_gaurd,但调用 func1 之后。

这样做可以/安全吗?或者 func2 中的 lock_guard 对 func1 有影响吗?

我最初认为它没问题 - 但后来我的大脑开始告诉我这把锁很可疑。我可以很容易地在 func2 lock_guard 周围放置一个方 block - 但现在我需要知道它是否正常才能再次休眠 :o

最佳答案

很安全。请现在 sleep :)

当锁卫终止时(当它的作用域退出时),解锁功能会自动为你执行

查看更多here

The class lock_guard is a mutex wrapper that provides a convenient RAII-style mechanism for owning a mutex for the duration of a scoped block.

When a lock_guard object is created, it attempts to take ownership of the mutex it is given. When control leaves the scope in which the lock_guard object was created, the lock_guard is destructed and the mutex is released.

The lock_guard class is non-copyable.

关于c++ - 你能在同一个 block 中的互斥体 lock_guard 之前有代码吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57178681/

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