- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当开发人员在新范围内使用 std::unique_lock
自动解锁互斥量时,我看到了很多代码示例:
...
// do some staff
{
std::unique_lock<std::mutex> lock(shared_resource_mutex);
// do some actions with shared resource
}
// do some staff
...
在我看来,以这种方式使用 std::unique_lock
API 中的方法 unlock
来实现此行为会更好:
...
// do some actions
std::unique_lock<std::mutex> lock(shared_resource_mutex);
// do some actions with shared resource
lock.unlock();
// do some actions
...
这两个代码片段是否等价?开发人员出于什么目的使用第一个变体?也许是为了强调(使用括号)不能并行执行的代码?
最佳答案
当对象在作用域结束时被销毁,锁被释放。这就是 RAII 的重点。
使用 RAII 的好处是您不会忘记解锁,并且无论您如何离开范围都无关紧要。例如,如果抛出异常,锁仍将被释放。
如果您只需要在构建时锁定并在销毁时解锁,那么std::scoped_lock是一个更简单/更适合使用的类。
关于c++ - 在新范围内使用 unique_lock 是否等同于在共享资源工作结束时解锁调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51683326/
我在 Bjarne Stroustrup 的“C++ 编程语言,第 4 版”第 119 页中无意中发现了以下代码: queue mqueue; condition_variable mcond; mu
我不太清楚为什么 std::unique_lock比仅使用普通锁有用。我正在查看的代码示例是: {//aquire lock std::unique_lock lock(queue_m
请帮我看看我对 std::unique_lock 的理解移动语义是正确的。 假设我有一个函数 myFunc它需要在执行开始时获取互斥锁。 这个函数是从不同的函数调用的,其中一些函数例如myWrappe
我有一个应用程序,我使用 boost::shared_mutex 锁定在一个线程中编写一个 cv::Mat,然后从许多其他线程调用它。 这很好用,但是所有的读取都会减慢编写器的速度。我想这是因为写入正
Why would I use a unique_lock<> wrapper? 我有时会看到这样的代码 std::unique_lock lock(m_active_sessions_guard);
我遇到了一些关于 unique_lock 的奇怪行为。创建它之后,我尝试调用 unlock,但它使我的程序崩溃。我创建了一个最小的示例,该示例始终在解锁功能上崩溃(使用 gdb 进行确认)。 #inc
void Fn() { std::mutex* mutex = new std::mutex; std::unique_lock lock(*mutex); delete mutex; }
即使我手动调用了 unlock,unique_lock::unlock() 函数是否会在销毁时调用,以便在给定的互斥锁上接收到两次解锁信号? 最佳答案 不,它不会尝试解锁。如果你看unlock ,它
当开发人员在新范围内使用 std::unique_lock 自动解锁互斥量时,我看到了很多代码示例: ... // do some staff { std::unique_lock lock(sh
在使用类时,我试图更好地理解 std::mutex、std::lock_guard、std::unique_lock . 对于初学者来说,我知道 lock_guard 和 unique_lock 之间
我想在我的代码中使用线程,并认为即将到来的 C++0x 扩展会很方便,因为它们最终会成为一个标准。这似乎是面向 future 的,无需使用像 boost::thread 这样的额外库。 不幸的是,我找
我正在考虑使用以下代码: auto now = std::chrono::high_resolution_clock::now(); std::unique_lock lock(mutex, std:
我需要根据函数中的参数创建 unique_lock 或共享锁。我无法在功能范围内正确定义。所以我需要做这样的事情。 function (bool check) { lock; if (check)
在这个例子中,std::unique_lock 调用带有标志 std::defer_lock。在 cppreference 上写道:“defer_lock_t 不获取互斥体的所有权”和:“(析构函数)
我们使用的互斥锁有一个奇怪的接口(interface)(例如奇怪的外壳)。对 std::unique_lock 进行专门化将有助于减少使用此互斥锁的认知开销。 我在标准中找不到任何专门允许专门化 st
我正在使用 std::mutex 在函数的开头复制 std::shared_ptr。 // Lock the mutex unique_lock guard(d_mutex); // Copy a s
今天我在我们的代码中偶然发现了一个讨厌的错误: std::unique_lock (some_mutex); 注意缺少的标识符。我很惊讶这实际上编译并翻译成: std::unique_lock som
据我所知,std::unique_lock 是一种围绕底层 mutex 对象的包装器,以提供更安全使用原始 mutexes 实现(例如,如果抛出异常或销毁时,最终处于解锁状态)。这就是所有 std::
基于 C++ Equivalent to Java's BlockingQueue void push(T const& value) { // original version {
我在看this talk路易斯·布兰迪 (Louis Brandy),当一位观众提出这个显而易见的问题时: Why does std::unique_lock have a default const
我是一名优秀的程序员,十分优秀!