【问题标题】:specify threads number in C Sharp在 C Sharp 中指定线程数
【发布时间】:2012-01-10 15:52:19
【问题描述】:

有没有办法在 C# 中动态编码线程? 例如,我们希望程序用户定义用于某些计算的线程数

【问题讨论】:

  • 我认为答案是肯定的,但在我向您展示示例之前需要更多信息。或许您可以详细解释一下计算的要求和性质?
  • 算什么?并非每个算法都可以并行化,但如果可以,那么您可以轻松创建任何合理数量的线程。但是,在双核机器上拥有 100 个线程不会给您带来太多好处。
  • 没关系,因为它与编程艺术有关,而且我知道顺序算法的线程是浪费时间(不是不可能,而是可能的)。假设所有操作都已定义,并且线程数与这些操作功能之间存在关系。

标签: c# multithreading dynamic macros


【解决方案1】:

这是一个广泛的话题,但如果您使用的是 .NET 4.0 并且主要受 CPU 限制(您表明您是),那么请查看 Parallel 类。默认情况下它选择使用的线程数(*),但您也可以change that

(*) 通常基于您拥有的 CPU/内核数量,这对于 CPU 密集型操作是有意义的。

【讨论】:

    【解决方案2】:

    使用Parallel时可以设置MaxDegreeOfParallelism。它可能决定使用更少的线程,但不会使用更多。

    您可以手动创建 x 个线程,然后自己将它们拼凑出来。

    您可以自己将工作分解成更小的工作项,将它们排入默认线程池,然后调用SetMaxThreads

    和上面一样,但不干扰其他代码,您可以将委托排入您自己的线程安全队列,并创建 x 个线程,这些线程出列并调用直到队列为空。

    您可以使用Semaphore

    【讨论】:

    • 你说使用信号量,但我没有公共资源。如果它有任何其他设备,请描述更多。
    • 对不起,我没听懂你的问题,你能改一下吗?
    【解决方案3】:

    你可以使用线程池

    更多信息:http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-03
      • 1970-01-01
      相关资源
      最近更新 更多