Ran*_*der 2 c# multithreading locking
在我的应用程序中,我有一个对象列表.我将每隔几分钟运行一个进程(线程)来更新此列表中的值.我将有其他进程(其他线程)只读取这些数据,他们可能会同时尝试这样做.
当列表更新时,我不希望任何其他进程能够读取数据.但是,我不希望在没有更新时,只读进程会相互阻塞.最后,如果进程正在读取数据,则更新数据的进程必须等到读取数据的进程完成.
我应该实现什么样的锁定来实现这一目标?
这就是你要找的东西.
ReaderWriterLockSlim是一个将处理您要求的场景的类.您可以使用2对功能:
EnterWriteLock 和 ExitWriteLockEnterReadLock 和 ExitReadLock第一个将等待,直到所有其他锁都关闭,读取和写入,所以它会像你一样给你访问lock().
第二个是相互兼容的,你可以在任何给定的时间有多个读锁.
因为没有像lock()语句一样的语法糖,所以请确保你永远不会忘记退出锁定,因为Exception或其他任何东西.所以在这样的形式使用它:
try
{
lock.EnterWriteLock(); //ReadLock
//Your code here, which can possibly throw an exception.
}
finally
{
lock.ExitWriteLock(); //ReadLock
}