多线程概念:会在所有子线程执行完毕之前执行返回语句

本文关键字:执行 语句 返回 线程 多线程 | 更新日期: 2023-09-27 18:06:12

我有一个最近一直困扰我的问题。请看下面的c#代码示例。

 public void threading()
 {
     for(int count =0; count< 4; count++)
     {
        Thread childThread = new Thread(childThread);
        childThread.start()
     }
     return;
 }
public void childThread()
{
 // Do alot of work 
}

因为在threading方法的循环之后有一个返回语句,threading会在所有子线程完成执行之前执行返回语句吗?我在某个地方读到线程与fork不同,因为它们不创建单独的内存区域,所以死线程最终会在哪里?

多线程概念:会在所有子线程执行完毕之前执行返回语句

将在所有子线程之前执行返回语句线程执行完毕?

也许是的。也许不是。这完全取决于你的childThread方法需要多长时间来执行。如果你的childThread方法真的花费更少的时间,那么在threading方法中执行返回语句之前,所有四个线程都可能完成。

另一方面,如果它需要很长时间,那么即使在threading方法完成执行或返回Main之后,线程也可以继续异步执行。

你需要知道的另一件事:

默认情况下,他们创建的所有线程都是后台线程。所以只要你的进程还活着,它们就会存在。如果你的主GUI线程即将结束,那么这四个线程也将被终止。所以至少有一个前台线程必须是活的,你的四个线程才能继续执行childThread方法运行到完成。

就内存而言-创建的每个线程都有自己的堆栈内存区域,但它们共享公共堆内存。此外,无论是堆栈内存还是线程的堆内存,它肯定位于进程自己的地址空间的外围。

如果你想强制所有的子线程在你的threading方法返回之前终止,你可以在线程上使用Join方法,例如

public void Threading()
{
    List<Thread> threads = new List<Thread>();
    // start all threads
    for(int count =0; count< 4; count++)
    {
        Thread childThread = new Thread(ChildThread);
        childThread.start();
        threads.Add(thread);
    }
    // block until all threads have terminated
    for(int count =0; count< 4; count++)
    {
        threads[count].Join();
    }
    // won't return until all threads have terminated
    return;
}
public void ChildThread()
{
    // Do alot of work 
}