线程安全访问和修改自定义数据结构

时间:2014-09-04 07:44:21

标签: c# .net multithreading c#-4.0

以下是我在中间层的自定义数据结构,可由多线程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之后,我们需要为多个用户提供跨多种请求的数据。如果问题需要进一步澄清,请告诉我。

0 个答案:

没有答案