以下是我在中间层的自定义数据结构,可由多线程UI访问:
public static ConcurrentDictionary<int, List<Data_Entity_Type_1>> dataList_1;
public static ConcurrentDictionary<int, List<Data_Entity_Type_2>> dataList_2;
此处,整数键用于登录用户的唯一用户ID,因此每个连接的用户都将使用自己的列表进行操作,从而与其他用户分离。但是,对用户列表的多线程访问将通过:
UI AJAX调用同时加载多个组件,包括读写操作。
通过多个设备连接的单个用户,包括读写操作。
对于不同的用户标识密钥,所使用的ConcurrentDictionary在其所有修改中都是线程安全的,但是List里面不是线程安全的,它也可以被多个线程访问以进行读/写操作。
请帮我解决以下问题:
List是否有一个线程安全选项,在我的理解中,ConcurrentBag将不是一个正确的数据结构,因为它不能像列表一样使用,它不会按顺序填充数据不能使用像[0]这样的索引来引用元素。
为了使列表访问线程安全,只需锁定修改操作就可以了,但是读取不需要锁定,所以我们可以使用简单的锁
ReaderWriterLock会更好地选择这样一个List,其中可以有多个读者和作者同时访问List。
请注意,Concurrent Dictionary是静态的,因为它位于Rest API之后,我们需要为多个用户提供跨多种请求的数据。如果问题需要进一步澄清,请告诉我。