我在Mac 2上运行类似的代码示例,一个用C++编写,另一个用C#编写.2个并行执行的简单任务(或者至少我希望它们),一个在循环中打印'+',另一个在循环中打印' - '.我期待2个样本的输出非常相似,但是我觉得它们有点不同.
C++似乎真正并行运行任务.我可以看到+ - 在每次运行时都很好地交替,但C#似乎运行一个任务一段时间,然后切换到另一个任务并运行一段时间.像这样的东西:
C++: +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
C# : ++++++++++---------++++++------
Run Code Online (Sandbox Code Playgroud)
我理解无法对并行线程的运行方式做出假设,我很好奇C++能够始终如一地产生如此好的结果.
谢谢你的时间!
C#:
using System;
using System.Threading.Tasks;
public class ConcurrentTasks
{
public static void Main(String[] args)
{
var task1 = Task.Run(()=>DemoTask("+"));
var task2 = Task.Run(()=>DemoTask("-"));
var res1 = task1.Result;
var res2 = task2.Result;
Console.WriteLine("\nResults:");
Console.WriteLine(res1);
Console.WriteLine(res2);
}
private static String DemoTask(String label)
{
for (int i = 0; i < 1000; i++)
{
Console.Write(label);
}
return label + " result";
}
}
// mcs ConcurrentTasks.cs
// mono ConcurrentTasks.exe …Run Code Online (Sandbox Code Playgroud)