防止并发读写类成员

时间:2019-06-20 08:22:04

标签: c++ multithreading

出于以下原因,我要求删除此问题:
*内容不具有普遍意义
*(雷米·勒博(Remy Lebeau)提供的答案)并未解决问题所引发的问题

为什么不删除它? (我无法解释为什么SO觉得需要像这样存储垃圾) 请删除问题并完成。

1 个答案:

答案 0 :(得分:3)

while循环替换为std::lock_guard。这样的繁忙循环阻塞了调用线程,因此只要让保护程序阻塞,直到获得锁为止。不要手动锁定/解锁std::mutex,让守卫为您完成:

template<typename T>
struct State
{
private:
    std::map<std::string, T> statedata;
    std::mutex mux_state;

public:
    ...
    void update(std::string k, T t)
    {
        std::lock_guard<std::mutex> g(mux_state);
        statedata[k] = std::move(t);
    }
    ...
    T read(std::string k)
    {
        std::lock_guard<std::mutex> g(mux_state);
        return statedata[k];
    }
    ...
};