簡體   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