私は非常に似質問は、私は、コンテナスレッドセーフaswellにアクセスしたいではなく、参照することにより、キャッシュされたバージョンを返すと思い、2012年、すでにクリティカルセクションと戻り値
Critical Sections and return values in C++
を求めています。
struct Container {
const Data& getSomeData() const {
EnterCriticalSection(& myCritSec);
if (update) {
cache.calulatefromcontainer();
}
// fill retobj with data from structure
LeaveCriticalSection(& myCritSec);
return cache;
}
private:
mutable Data cache;
};
問題は、「リターンキャッシュ」の行がもう保護されないということです。参照で "キャッシュ"スレッドを安全に戻すことは可能ですか?
変更可能なデータへの参照を戻すことは、基本的にはスレッドセーフなコンテナでは不可能です。ここで捨てるほどではない。 – SergeyA