我有一份资源(向量、列表等),我想让多个写者/读者都能够访问。
我不确定怎样做才能实现最佳性能,即在数据结构被锁定时读取器需要使用最小数量的锁。是否最好使用两个锁,一个称为readmutex,另一个称为writemutex?
例如:
struct Foo {
mutex writemutex_;
mutex readmutex_;
vector<string> data_;
void write(string data)
{
lock_guard<mutex> locker(writemutex_);
data_.emplace_back(move(data));
}
string get(int index) const {
// I don't need to lock for read, but what if the data is being written?
// and so should I lock lockmutex_? If so, then readmutex_ is unnecessary?
// is there some cleaver way that I can avoid readers from being blocked?
return data_[index];
}
};
这里还可以使用哪些其他的同步技术?
std::shared_lock
来解决这个问题。在那之前,您可以使用具有此功能的线程库(例如Boost)。 - Angew is no longer proud of SO