什么时候用 ReaderWriterLockSlim 什么时候用 ConcurrentBag?
When to use ReaderWriterLockSlim and When to use ConcurrentBag?
如果我使用 ConcurrentBag
(处理一个作者和多个读者的场景)而不是在 List<> 上使用 ReaderWriterLockSlim
是否相同?
更新 1:
场景是有多个线程可以到达一个静态列表,有些可能需要读取有些可能需要写入,我想要的是:
1- 只允许一个线程从列表中 add\edit\delete 而没有其他线程试图 adding\editing\deleting 它。
2- 如果没有线程 adding\editing\deleting.
允许多个线程同时读取它
在您的场景中,听起来您应该在列表中使用 ReaderWriterLockSlim。
并发包不支持删除(完全),编辑不安全。
使用 ReaderWriterLockSlim 锁定列表将允许安全删除,并允许安全编辑,前提是编辑是在写入锁定范围内完成的。
尽管这两种构造都与同步和线程相关,但它们绝对不能互换。
- ConcurrentBag 是一个集合,您可以以线程安全的方式添加、获取、查看和(最重要的)枚举。
- ReaderWriterLockSlim 是一个同步对象,可以根据需要读取锁定或写入锁定。
如果我使用 ConcurrentBag
(处理一个作者和多个读者的场景)而不是在 List<> 上使用 ReaderWriterLockSlim
是否相同?
更新 1:
场景是有多个线程可以到达一个静态列表,有些可能需要读取有些可能需要写入,我想要的是:
1- 只允许一个线程从列表中 add\edit\delete 而没有其他线程试图 adding\editing\deleting 它。
2- 如果没有线程 adding\editing\deleting.
在您的场景中,听起来您应该在列表中使用 ReaderWriterLockSlim。
并发包不支持删除(完全),编辑不安全。 使用 ReaderWriterLockSlim 锁定列表将允许安全删除,并允许安全编辑,前提是编辑是在写入锁定范围内完成的。
尽管这两种构造都与同步和线程相关,但它们绝对不能互换。
- ConcurrentBag 是一个集合,您可以以线程安全的方式添加、获取、查看和(最重要的)枚举。
- ReaderWriterLockSlim 是一个同步对象,可以根据需要读取锁定或写入锁定。