繁体   English   中英

将互斥锁与shared_ptr结合使用可保护跨副本共享的数据

[英]Using a mutex in conjunction with shared_ptr to protect data shared across copies

我有一个类,其副本通过shared_ptr共享相同的数据。 由于该数据将由不同的线程修改,因此我将使用互斥锁来保护它,但是,据我了解,互斥对象在不同副本之间必须相同才能正常工作,而忽略了互斥体实际上不可复制的事实。

因此,我也打算将互斥锁放入shared_ptr中。 像这样:

#pragma once

#include <mutex>
#include <memory>
#include <vector>

class test {
public:
  auto some_action(int x) -> void {
    std::scoped_lock(*m_store_mutex);

    m_shared_store->push_back(x);
  }

private:
  std::shared_ptr<std::mutex> m_store_mutex { std::make_shared<std::mutex>() };
  std::shared_ptr<std::vector<int>> m_shared_store { std::make_shared<std::vector<int>>() };
};

这种方法有效吗? 它似乎正在工作,但我想确定。

PS

这个问题与我的非常相似,但是我觉得答案不够具体。

您可能需要考虑使用std::shared_mutex而不是std::mutex

根据CoryKramer在shared_mutex说明中的解释

它比std::mutex更适合您的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM