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的快速发展,你重新测试你的程序会更好,也许现在优先工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |