gpt4 book ai didi

c# - 使用多线程为递归类实例创建新对象

转载 作者:行者123 更新时间:2023-12-03 13:20:30 25 4
gpt4 key购买 nike

可以说有一个类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*/);}
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%的确定性可以确保Parallel.For退出时不会破坏A11..A22?

例子:

1)主线程启动构造函数。

2)Parallel.For启动四个并发线程。

3)四个线程获取其类A的副本(尚未创建,它们如何并发工作?)

4)每个人都在自己的副本中创建一个新对象(仅由创建者线程可见吗?)

5)平行

选择使用哪个副本?如果所有内容都是真实创建的,那么这必须是串行操作。但是,使用parallel.for时,创建时间会减少。

A11..A22也有四个组件,这会更深入,直到递归达到极限为止。

谢谢。

最佳答案

Question: Is there %100 certainity that A11..A22 will not be destroyed when Parallel.For exits?



绝对地。它们在新创建的对象中是可访问的。这是您的逻辑错误:

Four threads get their copies of class A(which is not created yet, how can they work concurrently?)



他们没有。四个线程(如果确实有四个线程)将全部使用 this-实例已创建,但尚未完全初始化(构造函数尚未完成)。代码仍然可以使用其构造函数尚未完成的对象-这样做时只需要小心即可。

关于c# - 使用多线程为递归类实例创建新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18027462/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com