在我的应用程序中,我有一个对象列表。我将每隔几分钟运行一个进程(线程),以更新此列表中的值。我将让其他进程(其他线程)只读取此数据,并且它们可能会同时尝试这样做。
更新列表时,我不希望任何其他进程能够读取数据。但是,我不希望只读进程在没有更新发生时相互阻塞。最后,如果一个进程正在读取数据,则更新数据的进程必须等到读取数据的进程完成。
我应该实现什么样的锁定来实现这一目标?
最佳答案
This正是您要找的。p>
ReaderWriterLockSlim 是一个将处理您要求的场景的类。 您可以使用 2 对函数:
-
EnterWriteLock
和ExitWriteLock
-
EnterReadLock
和ExitReadLock
第一个会等待,直到所有其他锁都关闭,包括读和写,所以它会给你类似 lock()
的访问权限会做。
第二种是相互兼容的,你可以在任何给定时间拥有多个读锁。
因为没有像 lock()
这样的语法糖语句,确保你永远不会因为异常或其他原因而忘记退出锁。所以以这样的形式使用它:
try { lock.EnterWriteLock(); //ReadLock //Your code here, which can possibly throw an exception. } finally { lock.ExitWriteLock(); //ReadLock }
关于c# - .NET 中的线程同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6963804/