using System; using static System.Console; using System.Threading; using System.Threading.Tasks; using System.Diagnostics; public class data{public int a,b; public double sum;}; public class main{ public static void hsum(object o){ data d=(data)o; d.sum=0; for(int i=d.a;i0)N=(int)double.Parse(args[0]); WriteLine($"N={(float)N}"); var data1=new data(); var data2=new data(); data1.a=1; data1.b=N/2; data2.a=N/2; data2.b=N; Thread t = new Thread(hsum); var watch=new Stopwatch(); watch.Reset(); watch.Start(); Write($"Running hsum in 2 threads in parallel:\n"); t.Start(data1); hsum(data2); t.Join(); watch.Stop(); double sum=data1.sum+data2.sum; Write($"\tMain: hsum from {1} to {(float)N} is {(float)sum}\n"); Write($"\ttime: {watch.ElapsedMilliseconds/1000.0} sec\n"); data2.a=1; data2.b=N; watch.Reset(); watch.Start(); Write($"Running hsum in 1 thread:\n"); hsum(data2); Write($"\ttime: {watch.ElapsedMilliseconds/1000.0} sec\n"); data2.sum=0; Write($"Calculating sum in 4 threads via Parallel.For:\n"); watch.Reset(); watch.Start(); Parallel.For( 1,N,()=>0.0,(i,loop,psum)=>psum+=1.0/i, (psum)=>{lock(data2);data2.sum+=psum;} ); watch.Stop(); Write($"\tMain: hsum from {1} to {(float)N} is {(float)data2.sum}\n"); Write($"\ttime: {watch.ElapsedMilliseconds/1000.0} sec\n"); }//Main }//class main