我想以下列方式保护对资源的访问:
这似乎是一个简单的问题,即使用正确的lock
,或者可能使所有操作都是原子的,但我认为不是这样。
如果我只有一个用于更新的写锁(即ReaderWriterLockSlim
),或者使用非锁定代码,则不会阻止多个线程运行更新过程(或排队等待)。如果我在检查资源是否需要更新之前使用锁定来阻塞线程,则它们不能并发执行,而是有效地序列化。
我可以让特定的线程执行资源的所有检查和更新,并利用像ManualResetEvent
这样的东西来保持其他读取线程,直到更新完成。 (或者,如果更新是作为原子操作实现的,那么只需考虑具有特定的更新线程。)
但是,我不确定最佳做法,我想问一下你是否认为可以用更少的努力来满足要求,或者如果我在任何假设中都离开了。
答案 0 :(得分:0)
我认为您正在寻找ReaderWriterLockSlim
。使用独占锁定模式进行书写。