c# - 如何获取主线程并设置其优先级

标签 c# .net multithreading

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

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

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

最佳答案

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

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

您可以查看此链接:https://learn.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++;
    }
}

关于c# - 如何获取主线程并设置其优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466626/

相关文章:

c# - ReaderWriterLockSlim 的神秘死锁损坏

c# - 刷新页面 C# ASP.NET

c# - XML 文件而不是 XML 字符串

c# - 将长字符串拆分为自定义字符串

.net - 在 F# Web Api 项目中使用可选查询参数

.net - Math.Max 上的 F# 类型推断

c# - 你如何通过 log4net 记录机器名称?

java - 有没有办法让线程池线程退出处理给定的任务?

java - 在 !.isTermminate 循环内添加 Thread.sleep 可以吗?

java - 测试多线程计划任务