内存锁定以确保共享数据可以被许多线程读取,但只能由一个线程写入?

时间:2015-11-21 16:53:29

标签: c# multithreading list thread-safety shared-memory

我正在尝试编写一个C#程序,其中列表 A 中的值将根据线程中的特定值 x 进行检查。我希望线程将他们的 x 值与列表中的每个值进行比较,如果找不到,我希望他们将值 x 添加到 A 的。然后,该线程将从其私有内存中的列表中获取新的 x ,并再次开始将其与 A 中的值进行比较。该程序的目标是使 A 成为唯一值的列表,并包含线程中列表的所有值。

我想知道C#是否有一些本机读/写锁定允许尽可能多的线程从单个列表中读取,但是一旦开始写入,我希望所有其他线程在尝试之前等待再次从列表中读取。

另外,有没有办法可以确保多个线程不会同时尝试写入?如果2个线程包含相同的 x 值并试图同时获得写锁定,那么我可以看到这是一个问题 - 然后将相同的值一个接一个地添加到列表中。

1 个答案:

答案 0 :(得分:3)

  

我想知道C#是否有一些本机读/写锁,允许尽可能多的线程从单个列表中读取

是的,请使用Reader Writer Lock。这就是它的设计目标。

.net ReaderWriterLockReaderWriterLockSlim分别有两个版本的ReaderWriterLock。后者是首选,因为它是有效的。