加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 多次调用优先级最低的线程

发布时间:2020-12-15 23:44:32 所属栏目:百科 来源:网络整理
导读:以下代码5个具有不同优先级的线程正在竞争访问具有8个内核的CPU(Mac OS X 10.8.5,Mono).每个线程增加其计数器. using System;using System.Threading; class PriorityTesting { static long[] counts; static bool finish; static void ThreadFunc(object iT
以下代码5个具有不同优先级的线程正在竞争访问具有8个内核的CPU(Mac OS X 10.8.5,Mono).每个线程增加其计数器.

using System;
using System.Threading;

      class PriorityTesting 
     { 
       static long[] counts; 
       static bool finish;

       static void ThreadFunc(object iThread) 
       { 
         while(true) 
         { 
           if(finish) 
              break; 
           counts[(int)iThread]++; 
         } 
       }

       static void Main() 
       { 
         counts = new long[5]; 
         Thread[] t = new Thread[5]; 
         for(int i=0; i<t.Length; i++)  
         { 
           t[i] = new Thread(ThreadFunc); 
           t[i].Priority = (ThreadPriority)i; 
         } 
         // Запускаем потоки 
         for(int i=0; i<t.Length; i++) 
           t[i].Start(i);

         // Даём потокам возможность поработать 10 c 
         Thread.Sleep(10000);

         // Сигнал о завершении 
         finish = true;

         // Ожидаем завершения всех потоков 
         for(int i=0; i<t.Length; i++) 
           t[i].Join(); 
         // Вывод результатов 
         for(int i=0; i<t.Length; i++) 
           Console.WriteLine("Thread with priority {0,15},Counts: {1}",(ThreadPriority)i,counts[i]); 
       }   
     }

汇编:

$mcs PriorityTesting.cs
$mono PriorityTesting.exe

输出:

Thread with priority          Lowest,Counts: 178544880
Thread with priority     BelowNormal,Counts: 167783608
Thread with priority          Normal,Counts: 160593225
Thread with priority     AboveNormal,Counts: 79123315
Thread with priority         Highest,Counts: 81623159

具有最低优先级的线程如何比具有最高优先级的线程调用多次?

UPD:

具有2个内核的CPU上的相同代码(Windows,.NET):

Thread with priority         Lowest,Counts:    7608195 
 Thread with priority    BelowNormal,Counts:   10457706 
 Thread with priority         Normal,Counts:   17852629 
 Thread with priority    AboveNormal,Counts:  297729812 
 Thread with priority        Highest,Counts:  302506232

为什么不同?

解决方法

优先支持未在Mono中实现,因此您所看到的关于被调用的最低优先级的行为可能仅仅是运气.

在github中有来自实施此属性的贡献者的拉取请求,因此您可能希望与他一起请求对其进行审核.

更新:这个答案可能已经过时了.随着Mono的快速发展,你重新测试你的程序会更好,也许现在优先工作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读