出于以下原因,我要求删除此问题:
*内容不具有普遍意义
*(雷米·勒博(Remy Lebeau)提供的答案)并未解决问题所引发的问题
为什么不删除它? (我无法解释为什么SO觉得需要像这样存储垃圾) 请删除问题并完成。
答案 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];
}
...
};