【发布时间】:2016-08-27 20:22:28
【问题描述】:
我想在课堂上使用std::mutex,但注意到它不可复制。我在我的图书馆的底层,所以有这种行为似乎是一个糟糕的主意。
我在std::mutex 上使用了std::lock_guard,但似乎没有shared_lock_guard,最好提供写锁专用行为。这是我自己的疏忽还是微不足道的实施?
【问题讨论】:
-
也许你需要这个:std::shared_lock
-
这听起来像是一个严重的 XY 问题/设计缺陷。如果你有一个类级别的互斥锁,请不要复制它。
-
"我在我的图书馆的底层,所以有这种行为似乎是一个糟糕的主意。"互斥体通常不应该存在于"图书馆的底层”。至少,不是你建议的方式。这听起来像是您正在尝试对实用程序类的互斥锁访问。这通常是个坏主意。
-
@πάνταῥεῖ 这就是我要做的。但是关于
std::shared_lock_guard为std::shared_mutex::shared_lock提供范围保护的问题仍然有效。 -
如果您真的想要非作用域锁定(例如,在多个线程之间共享),请进入
std::shared_ptr<std::lock_guard<Mutex>>的领域以及与之相关的所有乐趣,包括导致死锁的内存泄漏。我个人更希望看到您的 XY 问题的 X 部分,希望我们能对此有所帮助。
标签: c++ c++11 locking c++14 mutex