【发布时间】:2009-01-30 20:14:47
【问题描述】:
这似乎是一个幼稚的问题,但我与一位同事进行了讨论,我认为没有真正需要缓存是线程安全/同步的,因为我认为这无关紧要谁在输入一个值,因为给定键的值应该是“恒定的”(因为它最终来自同一来源)。如果值可以很容易地更改,那么缓存本身似乎并不是很有用(因为如果您关心该值“当前正确”,您应该转到原始源)。
我认为至少使 GET 同步的主要原因是,如果在缓存中丢失非常昂贵,并且您不希望每个线程都出去获取一个值以放回缓存中。即使这样,您也需要在读取-读取-放置周期中真正阻止所有消费者的东西。
无论如何,我的工作假设是散列本质上是线程安全的,因为对于任何 {key,value} 组合,该值要么为空,要么与谁“先”到那里无关紧要写。
问题是:这是一个合理的假设吗?
更新:我的问题的真正范围是非常简单的 id->value 样式缓存(或 {parameters}->{calculated value} 无论谁写入缓存,值都是相同的,我们是只是试图从“重新计算”/返回数据库中保存。对象的实际图形不相关,缓存通常是长期存在的。
【问题讨论】:
标签: c# java multithreading caching