|
|
|
|
<EFBFBD><EFBFBD>using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
using BenchmarkDotNet;
|
|
|
|
|
using BenchmarkDotNet.Attributes;
|
|
|
|
|
|
|
|
|
|
using BenchMarkDotnetStudy.Core;
|
|
|
|
|
|
|
|
|
|
namespace BenchMarkDotnetStudy.BenchmarkStudy
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// Counter <EFBFBD>W<EFBFBD>QKmՋ
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class CounterTest2
|
|
|
|
|
{
|
|
|
|
|
[Benchmark]
|
|
|
|
|
public void Thread32_Test()
|
|
|
|
|
{
|
|
|
|
|
Counter counter = new Counter();
|
|
|
|
|
|
|
|
|
|
List<Thread> threads = new List<Thread>()
|
|
|
|
|
{
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
new Thread(() => counter.Increment() ),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
threads.ForEach(t => t.Start());
|
|
|
|
|
threads.ForEach(t => t.Join());
|
|
|
|
|
|
|
|
|
|
Console.WriteLine($"<00>e<EFBFBD>l<EFBFBD>~_g<5F>e<1A>TotalCounter = {Counter.TotalCounter}");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Benchmark]
|
|
|
|
|
public void Thread32_Test2()
|
|
|
|
|
{
|
|
|
|
|
Counter counter = new Counter();
|
|
|
|
|
|
|
|
|
|
List<Thread> threads = new List<Thread>()
|
|
|
|
|
{
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
new Thread(() => counter.IncrementWithInterlocked() ),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
threads.ForEach(t => t.Start());
|
|
|
|
|
threads.ForEach(t => t.Join());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|