- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- using System.Diagnostics;
- using System.Runtime.InteropServices;
- namespace Threads
- {
- class Program
- {
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
- public static extern int GetCurrentProcessorNumber();
- private static int criticalSection = 0;
- private static object lockObject = new object();
- static void Main(string[] args)
- {
- Console.WriteLine("==================Sequential calls==============");
- Console.WriteLine();
- Target();
- Target();
- Target();
- Target();
- Target();
- Target();
- Target();
- Target();
- Console.WriteLine();
- Console.WriteLine("==================Parallel calls==============");
- Console.WriteLine();
- Action action = new Action(Target);
- Parallel.Invoke(new Action[] { action, action, action, action,
- action, action, action, action });
- Console.ReadKey();
- }
- private static void Target()
- {
- Thread.Sleep(2000);
- lock (lockObject)
- {
- criticalSection++;
- Console.WriteLine(string.Format("Thread ID: {0} and Processor ID: " +
- "{1} Critical Variable Value: {2}",
- Thread.CurrentThread.ManagedThreadId,
- GetCurrentProcessorNumber(), criticalSection));
- }
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/2506201512942.html
来源: http://www.codesnippet.cn/detail/2506201512942.html