深入浅出多线程教程第五篇:探讨关键同步构造方法?

2026-05-27 05:460阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1038个文字,预计阅读时间需要5分钟。

深入浅出多线程教程第五篇:探讨关键同步构造方法?

1: Mutex + Mutex 就像两个锁在一起,就像一个 C++ 中的互斥锁。

1:Mutex

Mutex 就像一个C# lock一样,不同的是它可以跨进程.

进入和释放一个Mutex要花费几毫秒,大约比C#的lock慢50倍。

使用一个Mutex的实例,调用WaitOne方法来获取锁,ReleaseMutex方法来释放锁。

因为Mutex是跨进程的,所以我们可以使用Mutex来检测程序是否已经运行。

publicstaticvoidMainThread()
{
using(varmutex=newMutex(false,"LoveJennyOneAtATimeDemo"))
{
if(!mutex.WaitOne(TimeSpan.FromSeconds(3),false))
{
Console.WriteLine("只能运行一个应用程序!");
return;
}

RunProgram();
}
}

2:Semaphore:

一个Semaphore就像一个酒吧一样,通过门卫来限制它的客人,一旦到达限制,没有人可以进入,

人们会在门外乖乖的排队,一旦有一个人离开酒吧,排队中的人就可以进入了一个了。

阅读全文

本文共计1038个文字,预计阅读时间需要5分钟。

深入浅出多线程教程第五篇:探讨关键同步构造方法?

1: Mutex + Mutex 就像两个锁在一起,就像一个 C++ 中的互斥锁。

1:Mutex

Mutex 就像一个C# lock一样,不同的是它可以跨进程.

进入和释放一个Mutex要花费几毫秒,大约比C#的lock慢50倍。

使用一个Mutex的实例,调用WaitOne方法来获取锁,ReleaseMutex方法来释放锁。

因为Mutex是跨进程的,所以我们可以使用Mutex来检测程序是否已经运行。

publicstaticvoidMainThread()
{
using(varmutex=newMutex(false,"LoveJennyOneAtATimeDemo"))
{
if(!mutex.WaitOne(TimeSpan.FromSeconds(3),false))
{
Console.WriteLine("只能运行一个应用程序!");
return;
}

RunProgram();
}
}

2:Semaphore:

一个Semaphore就像一个酒吧一样,通过门卫来限制它的客人,一旦到达限制,没有人可以进入,

人们会在门外乖乖的排队,一旦有一个人离开酒吧,排队中的人就可以进入了一个了。

阅读全文