关于 std::unique_lock 我应该知道什么?
What all should I know about std::unique_lock?
据我所知,std::unique_lock
是一种围绕底层 mutex
对象的包装器,以便提供比使用 raw 更安全 的实现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
}
尝试 #2 是否优于尝试 #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.
据我所知,std::unique_lock
是一种围绕底层 mutex
对象的包装器,以便提供比使用 raw 更安全 的实现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
}
尝试 #2 是否优于尝试 #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.