因此,这可能是一个显而易见的答案,但我只是有一个疑问,因为我没有看到它的使用...
因此,使用普通的互斥锁,您可以执行以下操作:
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();
}
Run Code Online (Sandbox Code Playgroud)
在这里我们可以轻松地看到互斥锁部分的开始/结束。
但是使用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
}
Run Code Online (Sandbox Code Playgroud)
在这里,我的疑问是通常您使用lock_guard来保护完整的c ++块。但是在func2中,我首先调用func1(它本身使用相同的互斥锁),然后在调用func1 之后的同一块中调用lock_gaurd 。
可以/安全吗?还是func2中的lock_guard对func1有影响?
我最初以为可以,但是后来我的大脑开始告诉我这把锁可疑。我可以轻松地在func2 lock_guard周围粘贴一个块-但是现在我需要知道它是否还可以,然后我才能再次入睡:o
| 归档时间: |
|
| 查看次数: |
109 次 |
| 最近记录: |