C# 使用多线程为递归类实例创建新对象
假设有一个类a和它的一个实例C# 使用多线程为递归类实例创建新对象,c#,multithreading,recursion,C#,Multithreading,Recursion,假设有一个类a和它的一个实例classA,类a有四个子类,分别命名为a11、a12、a21和a22 A的构造函数在Parallel.For的帮助下在单独的线程中创建a11、a12、a21、a22 //interior of A A A11; A A12; A A21; A A22; public A() { Parallel.For(0,4,i=> { if(i==0) {A11= new A(/*recursion limit parameter*/)
classA
,类a有四个子类,分别命名为a11、a12、a21和a22
A的构造函数在Parallel.For的帮助下在单独的线程中创建a11、a12、a21、a22
//interior of A
A A11;
A A12;
A A21;
A A22;
public A()
{
Parallel.For(0,4,i=>
{
if(i==0) {A11= new A(/*recursion limit parameter*/);}
if(i==1) {A12= new A(/*recursion limit parameter*/);}
if(i==2) {A21= new A(/*recursion limit parameter*/);}
if(i==3) {A22= new A(/*recursion limit parameter*/);}
});
}
问题:是否有100%的把握认为A11..A22在平行出口时不会被破坏
例如:
1) 主线程启动构造函数
2) Parallel.For启动四个并发线程
3) 四个线程获得了类A的副本(还没有创建,它们如何并发工作?)
4) 它们中的每一个都在自己的副本中创建一个新对象(仅由创建者线程看到?)
5) 两端平行
选择使用哪个副本?如果所有这些都是真实创建的,那么这必须是一个连续的操作。但使用parallel.for时,创建时间会缩短
A11..A22也有四个组件,这会更深入,直到递归达到极限
谢谢
问题:A11..A22在平行出口时不会被摧毁,这有100%的把握吗
当然。它们可以在新创建的对象中访问。这是您的逻辑错误:
四个线程获得了类A的副本(还没有创建,它们如何并发工作?)
他们没有。这四个线程(如果确实有四个线程)都将使用
this
-实例已经创建,只是还没有完全初始化(构造函数还没有完成)。代码仍然可以使用构造函数尚未完成的对象-在这样做时您只需要小心。发布一个自包含的最小代码如何?这也会帮助你得到答案。你是说真正的代码?