Высокая производительность кэширования
Следующий код должен кэшировать последнее чтение.LastValueCache
это кеш, к которому могут обращаться многие потоки (именно поэтому я использую разделяемую память). Для меня нормально иметь условия гонки, но я хочу, чтобы другие темы увидели измененныеLastValueCache
.
class Repository
{
public Item LastValueCache
{
get
{
Thread.MemoryBarrier();
SomeType result = field;
Thread.MemoryBarrier();
return result;
}
set
{
Thread.MemoryBarrier();
field = value;
Thread.MemoryBarrier();
}
}
public void Save(Item item)
{
SaveToDatabase(item);
Item cached = LastValueCache;
if (cached == null || item.Stamp > cached.Stamp)
{
LastValueCache = item;
}
}
public void Remove(Timestamp stamp)
{
RemoveFromDatabase(item);
Item cached = LastValueCache;
if (cached != null && cached.Stamp == item.Stamp)
{
LastValueCache = null;
}
}
public Item Get(Timestamp stamp)
{
Item cached = LastValueCache;
if (cached != null && cached.Stamp == stamp)
{
return cached;
}
return GetFromDatabase(stamp);
}
}
Repository
Объект используется многими потоками. Я не хочу использовать блокировку, потому что это повлияет на производительность, которая в моем случае важнее согласованности данных. Вопрос в томкакой самый маленький синхронизирующий механизм, который будет соответствовать моим потребностям? Может бытьvolatile
или одинMemoryBarrier
вget
а такжеset
будет достаточно?