互斥体是跨进程的同步,效率非常低
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Diagnostics;
namespace MultiThreadTest
{
class Program
{
const string file=@"C:\TestMutex.txt";
static Mutex mutex = new Mutex(false, "TestMutext");
static void Main(string[] args)
{
Thread.Sleep(3000);
Do();
mutex.Close();
Console.Read();
}
static void Do()
{
long d1 = DateTime.Now.Ticks;
mutex.WaitOne();
long d2=DateTime.Now.Ticks;
Console.WriteLine("After {0}, Process {1} get mutext",
(d2 - d1).ToString(), Process.GetCurrentProcess().Id.ToString());
try
{
if (!File.Exists(file))
{
using (FileStream fs = File.Create(file)) { }
}
for (int i = 0; i < 5; i++)
{
using (FileStream fs = File.Open(file, FileMode.Append))
{
String content = "Process:" + Process.GetCurrentProcess().Id.ToString() + "i:" + i.ToString()
+ "\r\n";
byte[] data = Encoding.Default.GetBytes(content);
fs.Write(data, 0, data.Length);
Thread.Sleep(300);
}
}
}
finally
{
mutex.ReleaseMutex();
}
}
}
}