【发布时间】:2011-09-30 17:52:23
【问题描述】:
我正在使用 ConcurrentBag 在运行时存储对象。在某些时候,我需要清空包并将包内容存储到列表中。这就是我所做的:
IList<T> list = new List<T>();
lock (bag)
{
T pixel;
while (bag.TryTake(out pixel))
{
list.Add(pixel);
}
}
我的问题是同步,据我在书中读到的锁比其他同步方法快。来源——http://www.albahari.com/threading/part2.aspx。
性能是我的第二个关注点,我想知道此时我是否可以使用 ReaderWriterLockSlim。使用 ReaderWriterLockSlim 有什么好处?原因是,我不希望此操作阻止传入请求。
如果是,我应该使用升级锁吗?
有什么想法吗?评论?
【问题讨论】:
-
您是否遇到了这段代码的特定性能问题,或者只是在试验一些东西?
-
失去锁。 ConcurrentBag 针对填充包的线程与清空包的线程相同的情况进行了高度优化。如果在您的特定用法中不是这种情况,请尝试使用队列和显式锁。
标签: c# multithreading synchronization locking readerwriterlockslim