如果我可以保证我的整个应用程序中只有一种方法会写入某个变量,那么我可以允许我的应用程序中的其他方法安全地读取该值吗?
如果是这样,我可以在不锁定变量的情况下摆脱那个特技吗?
在这种情况下,我正在做(或尝试做或想要做的)是让一个线程中的一种方法将值放入变量中,然后其他线程中的其他方法将读取该值并做出决定.
一个非常好的选择是锁定写入,同时允许读取。
在这里查看有关锁定的 MSDN 页面,但没有看到这样做的方法。
如果我可以保证我的整个应用程序中只有一种方法会写入某个变量,那么我可以允许我的应用程序中的其他方法安全地读取该值吗?
如果是这样,我可以在不锁定变量的情况下摆脱那个特技吗?
在这种情况下,我正在做(或尝试做或想要做的)是让一个线程中的一种方法将值放入变量中,然后其他线程中的其他方法将读取该值并做出决定.
一个非常好的选择是锁定写入,同时允许读取。
在这里查看有关锁定的 MSDN 页面,但没有看到这样做的方法。
与往常一样,这在很大程度上取决于上下文。
volatile
将解决此问题,但作为副作用而不是明确的意图;大多数人(包括我)无法正确定义什么volatile
意思- 所以要非常小心地将它用作“修复”。但是,您可能会发现Interlocked
无需lock
. 同时,无竞争者的速度快得离谱,甚至有lock
竞争者的速度也快得惊人。坦率地说,我不确定你给出的想法是否值得:一个单位几乎可以肯定是足够快的,只要你首先在外面做想法,只有当你知道你想要做的改变时.lock
lock
lock
lock
也有, ReaderWriterLockSlim
但实际上提高性能的情况很少 - 根据我的经验,最简单的方法通常是最快的,意思是要么lock
要么Interlocked
。ReaderWriterLockSlim
是一个更复杂的野兽,专为更复杂的场景而设计,因此有一点开销。数量不多,但足以让它值得仔细观察。