c# - .NET 中的线程同步

标签 c# multithreading locking

在我的应用程序中,我有一个对象列表。我将每隔几分钟运行一个进程(线程),以更新此列表中的值。我将让其他进程(其他线程)只读取此数据,并且它们可能会同时尝试这样做。

更新列表时,我不希望任何其他进程能够读取数据。但是,我不希望只读进程在没有更新发生时相互阻塞。最后,如果一个进程正在读取数据,则更新数据的进程必须等到读取数据的进程完成。

我应该实现什么样的锁定来实现这一目标?

最佳答案

This正是您要找的。

ReaderWriterLockSlim 是一个将处理您要求的场景的类。 您可以使用 2 对函数:

  • EnterWriteLockExitWriteLock
  • EnterReadLockExitReadLock

第一个会等待,直到所有其他锁都关闭,包括读和写,所以它会给你类似 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/

相关文章:

c# - 将下拉列表的值传递给 Javascript 变量

java - 设置方法/线程的最大执行时间

linux - 一个进程占用多少核?

c# - 在 C# 中使用任意位位置和长度跨字节边界提取值

c# - 如何让这段代码更干?

java - 关于java中的中断

mysql - 如何锁定单行

c# - ReaderWriterLockSlim 扩展方法性能

mysql - 并发丢弃没有锁的mysql事务

C# Excel 2010 编程