内存锁定,以确保共享数据可以由多个线程读取,但只能由一个线程写入
本文关键字:线程 一个 读取 数据 共享 内存 确保 锁定 | 更新日期: 2023-09-27 18:23:50
我正在尝试编写一个C#程序,其中列表a中的值将根据线程中的特定值x进行检查。我希望线程将它们的x值与列表中的每个值进行比较,如果找不到,我希望它们将它们的值x添加到A。然后,线程将从其私有内存中的列表中获得一个新的x,并开始再次将其与a中的值进行比较。该程序的目标是使A成为一个唯一值的列表,并包含线程中列表的所有值。
我想知道C#是否有一些本机读/写锁,可以允许尽可能多的线程从单个列表中读取,但一旦开始写入,我希望所有其他线程在再次尝试从列表中读取之前等待。
此外,有没有一种方法可以确保多个线程不会同时尝试写入?如果2个以上的线程包含相同的x值,并试图同时获得写锁定,然后一个接一个地将相同的值添加到列表中,我可能会认为这是一个问题。
我想知道C#是否有一些本地读/写锁,可以允许尽可能多的线程从一个列表中读取
可以,使用读写器锁。这就是它的设计目的。
在.net ReaderWriterLock
和ReaderWriterLockSlim
中分别有两个版本的ReaderWriterLock。后者是优选的,因为它是有效的。