std::unique_lock<std::mutex> mark_mutex(locked);崩溃
时间: 2024-09-23 17:06:32 浏览: 57
C++11 std::shared_ptr总结与使用示例代码详解
当你看到 `std::unique_lock<std::mutex> mark_mutex(locked);` 这样的代码并且遇到崩溃,通常是因为你在尝试创建一个 `unique_lock` 对象并传递一个已锁定(`locked`)的 `std::mutex` 作为构造参数。`unique_lock` 类的设计目的是为了自动管理锁的生命周期,这意味着它应该在构造时获取锁,在析构时释放锁。但是,如果你试图在锁已经被锁定的状态下初始化 `unique_lock`,它会认为锁已经是持有的,然后可能会抛出异常,比如 `std::invalid_argument` 或者 `std::bad_alloc`,因为你不能同时拥有一个锁两次。
这种情况可能出现在以下几个场景:
1. 错误地多次尝试获取同一个锁。
2. 锁未正确释放就被再次尝试获取。
3. 在锁的对象生命周期结束后,还尝试使用 `unique_lock` 初始化。
修复这个问题的关键在于确保在 `unique_lock` 的生命周期内正确操作锁,比如在需要的地方获取锁,使用完毕后确保 `unlock()` 被正确调用。如果是在某个条件满足后再获取锁,应使用 `try_lock()` 或者 `lock_shared()`。
阅读全文