【发布时间】:2023-03-29 22:52:01
【问题描述】:
我是线程基础知识的新手。
我有一个要对 XML 文件执行的操作队列(节点添加、节点删除等)
1]有 'n' 个 xml 文件,对于每个文件,线程池中的一个线程被分配使用 ThreadPool.QueueUserWorkItem 来做那些文件操作。
我想使用线程同时实现并发和操作顺序(重要)。
例如:假设如果要对文件“A.xml”执行操作 [a1,a2,a3,a4,a5]
和操作 [b1,b2,b3,b4,b5,b6,b7] 将在文件“B.xml”上执行.....
我想分配线程以便我可以在
中执行这些操作
同样的顺序,也同时发生(因为文件不同)。
2]也可以为每个操作分配一个线程,实现并发并保持顺序。
在 STA 模型中我做了类似的事情..
while(queue.count>0){
File f = queue.Dequeue(); //get File from queue
OperationList oprlst = getOperationsForFile(f);
// will get list-> [a1,a2,a3,a4,a5]
for each Operation oprn in oprlst
{
performOperation(f,oprn)
//in MTA i want to wait till operation "a1" completes and then operation "a2" will
//start.making threads wait till file is in use or operation a(i) is in use.
}
}
我想在保存操作订单的同时执行此操作。 线程(操作)可以等待一个文件...但是 不同的操作需要不同的执行时间。
我尝试了 AutoResetEvent 和 WaitHandle.WaitAll(..) 但它使 while 循环 停止直到所有 'a(i)' 操作完成..我希望 a(i) 和 b(j) 同时执行。 (但在 a(i) 和 b(j) 中排序)
目前使用 .net 2.0。
这非常相似,是Question 提出的这个问题的一部分
【问题讨论】:
-
是否有任何 a(i) 操作必须等待 b(i) 操作?
-
no..因为 a(i) 和 b(i) 将有不同的文件来处理。 all a(i) 将在 A.xml 上运行 ..all b(i) 在 B.xml 上
标签: c# concurrency multithreading