【问题标题】:How to get main thread and set its priority如何获取主线程并设置其优先级
【发布时间】:2019-06-06 04:01:31
【问题描述】:

我正在创建运行 parrarel 一些功能的应用程序,在 main 方法开始时,我尝试获取当前线程并更改其优先级。我不确定 Parrarel.For 是否正在创建新的 Threads/Tasks

Parallel.For(0,50,(i) =>
{       
   Guesser guesser = new Guesser();
   guesser.startBruteForce();
});

它只运行我的类的 9 个实例(通过 contructor 中的控制台打印检查),并且在几秒钟后创建下一个对象。我想将主线程优先级(如果是线程)更改为更高将阻止调度程序占用资源来创建新对象。

【问题讨论】:

  • 好吧,我真的不明白你想要做什么。你的解释我不清楚。所以我将把自己限制在你问题的标题上:检查System.Threading.Thread 类型的文档。它具有获取当前线程以及更改线程优先级的属性/方法...
  • 我想获取主线程的句柄,将其优先级设置为更高。
  • 如我所说,查看System.Threading.Thread 的文档。如果您不愿意阅读/浏览/搜索/重新访问文档,那么作为程序员,您对自己没有任何帮助;-)
  • 所以你是说Parallel.For 创建了太多线程?通过限制其他线程的资源,您的目标是什么?
  • 您几乎肯定在要求Thread.CurrentThread。考虑 ParallelOptions.MaxDegreeOfParallelism 属性,您可以将其设置为比 Environment.ProcessorCount 低 1,这样主线程就不必与并行线程竞争。

标签: c# .net multithreading


【解决方案1】:

TPL(任务并行库)是一组类型和 API,为开发人员提供了一种简单的方法 在他们的 .NET 应用程序中添加并行性和并发性。

如果您尝试限制创建的 Task 的数量,那没有意义,因为它是由 ThreadPool 它自己管理的。

您可以查看此链接:https://docs.microsoft.com/en-us/dotnet/standard/threading/the-managed-thread-pool

我只是添加了一些您可以测试的代码,我确认它运行良好(代码如下)。

应用程序控制台:

public readonly static object Locker = new object();

    private static int threadNumber;

    public static int ThreadNumber
    {
        get { return threadNumber; }
        set
        {
            lock(Locker)
            threadNumber = value;
        }
    }


    static void Main(string[] args)
    {


        Parallel.For(0, 50, (i) =>
        {
                Guesser guesser = new Guesser();
                guesser.StartBruteForce(ref threadNumber);
        });

        Console.ReadKey();

    }

类猜测器:

internal class Guesser
{
    internal void StartBruteForce(ref int threadNumber)
    {
        threadNumber++;
    }
}

【讨论】:

  • 谢谢。内部有什么用?是否等于私有?
  • 它是一个访问说明符,对其他名称空间隐藏成员和变量。
  • 我有最后一个问题。当我为for(int i =0;i<8;i++) { Guesser guesser = new Guesser(); Thread thread = new Thread(guesser.startBruteForce); thread.Start(); }创建正常的线程时,它似乎比帖子中的版本更快。 startBruteForce 正在调用一个递归函数来检查生成的密钥是否==密码。我在控制台上写了密钥,这向我展示了创建更多排列的密钥是正常的。是什么原因造成的?//我这里不知道怎么格式化代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多