我不确定是否需要使用像PLINQ
这样的高级技术,这是因为我想重新表达上一个问题Paralleling trading software。我认为我的上一个问题太复杂且不清楚,我希望现在我准确地提取了所需的信息,仅此而已。
我有两个非常相似(我会说几乎相同)的线程。
线程1:
while (true)
foreach (Object lockObj : lockObjects) {
lock (lockObj) {
// do work (may take some time)
}
}
}
Thread2(相同,但要完成另一项工作):
while (true)
// the same lockObjects from Thread1 are used so threads use "shared" resources
foreach (Object lockObj : lockObjects) {
lock (lockObj) {
// do another work (may take some time)
}
}
}
Profilier说,我正在等待释放锁的处理器时间约为30%。
如何轻松避免这种情况?怎么说:“好吧,如果对象现在被锁定,则推迟该对象的处理,处理另一个对象,过一会儿再返回该对象?”
最佳答案
一种方法是维护一个空闲对象队列,以及每个线程已处理内容的列表。让线程在处理它们时从尚未处理的队列中找到第一个空闲对象,并在完成后将其放回队列的末尾。