- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
据我所知,std::unique_lock
是一种围绕底层 mutex
对象的包装器,以提供更安全使用原始 mutex
es 实现(例如,如果抛出异常或销毁时,最终处于解锁状态)。这就是所有 std::unique_lock
的用途吗?
尝试#1
std::mutex m; // global
void foo() {
m.lock();
// critical section
m.unlock();
}
尝试 #2
std::mutex m; // global
void foo() {
std::unique_lock<std::mutex> ul(m);
// critical section
}
Try #2 是否优于 Try #1,这就是 std::unique_lock
的用途吗?请提供一些可能需要 std::unique_lock
的其他示例。
最佳答案
是的,这正是它的用途,以及您应该使用它的原因。
它确实超出了您给出的简单示例的一点;尤其是与时间相关的内容,您自己实现起来会很复杂,但您可以做到。不过,最终,是的,它是一个包装器。
来自 cppreference on unique_lock
:
The class
unique_lock
is a general-purpose mutex ownership wrapper allowing deferred locking, time-constrained attempts at locking, recursive locking, transfer of lock ownership, and use with condition variables.
关于c++ - 关于 std::unique_lock 我应该知道些什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321587/
我在 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
我是一名优秀的程序员,十分优秀!