嵌套线程?

时间:2010-03-25 16:51:00

标签: c# multithreading

有关在其他正在运行的线程中生成新线程的规则是什么?我有一个C#应用程序,它在后台处理两个基本线程。我最近介绍了一些重型IO的东西,我想在线程中设置它们。线程内嵌的线程是否很酷?

4 个答案:

答案 0 :(得分:9)

线程不会被建模为大部分处理的层次结构; “嵌套”的概念根本就不存在。

线程并行执行所有其他线程,无论哪个线程创建它。在创建线程时唯一重要的事情是它是后台线程还是前台线程以及线程的优先级:

  • 优先级确定在与其他线程竞争资源时给出的线程切片时间。更高的优先级意味着更多的切片。

  • 前台线程保持一个进程,直到它们的工作完成。对于后台线程,当所有前台线程在一个进程中完成执行时,进程结束并且后台线程终止,无论它们的工作是否完成。

答案 1 :(得分:5)

线程不会彼此嵌套 - 线程属于进程。所以如果你有线程A& B,然后他们各自创建C& D,C& D不属于A& B - 他们属于你的过程。

所以是的,可以从后台线程创建额外的线程。

答案 2 :(得分:3)

如果父线程在子线程上等待,则会出现可能导致死锁的新同步要求。

示例:(T代表线程,R代表共享资源)

  • T1锁定R1
  • T1开始T2
  • T3锁定R2
  • T2等待R2
  • T1等待T2
  • T3等待R1

答案 3 :(得分:1)

我发现通用多线程问题的最佳解决方案始终是拥有一个始终运行的“工作线程”池,您可以为其创建压入队列的作业。下一个可用的工作线程将从队列中弹出下一个作业并开始搅拌它。这为您提供了人们所希望的多线程功能以及保持一个人不受爆炸所需的封装。