我正在尝试编写一个 C# 程序,其中列表 A 中的值与线程中的特定值 x 进行检查。我希望线程将其 x 值与列表中的每个值进行比较,如果未找到,我希望它们将其值 x 添加到A。然后,线程将从其私有(private)内存中的列表中获取新的x,并开始再次将其与A中的值进行比较。该程序的目标是使A成为唯一值的列表,并包含线程中列表的所有值。
我想知道 C# 是否有一些 native 读/写锁,允许尽可能多的线程从单个列表中读取数据,但是一旦一个线程开始写入,我希望所有其他线程在尝试之前都等待再次从列表中读取。
此外,有没有办法确保多个线程不会尝试同时写入?如果 2 个以上的线程包含相同的 x 值并尝试同时获取写锁,然后将相同的值相继添加到列表中,我可以看到这是一个问题。
最佳答案
I'm wondering if C# has some native read/write lock that will allow as many threads to read from a single list as possible
是的,使用 Reader Writer Lock 。这就是它的设计目的。
.net 中有两个版本的 ReaderWriterLock,分别是 ReaderWriterLock
和 ReaderWriterLockSlim
。后者是首选,因为它很有效。
关于c# - 内存锁以确保共享数据可以被多个线程读取,但只能由一个线程写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33846013/