gpt4 book ai didi

c++ - 如何 std::mutex::lock 直到函数返回

转载 作者:可可西里 更新时间:2023-11-01 16:26:16 28 4
gpt4 key购买 nike

我想返回一个std::vector。此 std::vector 可以从其他线程访问(读和写)。如何在函数完成返回后立即解锁我的 std::mutex

例如:

// Value.cpp
std::vector<int> GetValue()
{
std::lock_guard<std::mutex> lock(mutex);

// Do super smart stuff here
// ...

return m_value;
}

// MyThread.cpp
auto vec = myVec.GetValue();

现在如果“在这里做 super 聪明的事情”是空的怎么办:

// Value.cpp
std::vector<int> GetValue()
{
std::lock_guard<std::mutex> lock(mutex);
return m_value;
}

// MyThread.cpp
auto vec = myVec.GetValue();

那么锁还是强制的吗?为什么?

最佳答案

使用 std::lock_guard通过 RAII 处理锁定和解锁 mutex,这正是它的用途。

int foo()
{
std::lock_guard<std::mutex> lg(some_mutex); // This now locked your mutex
for (auto& element : some_vector)
{
// do vector stuff
}
return 5;
} // lg falls out of scope, some_mutex gets unlocked

foo 返回后,lg 将超出范围,unlock some_mutex 返回。

关于c++ - 如何 std::mutex::lock 直到函数返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27384205/

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