频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
深入浅出多线程系列之五:一些同步构造(上篇)
2011-05-24 09:26:46           
收藏   我要投稿

1:Mutex

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

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

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

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

        public static void MainThread()
        {
            
using (var mutex = new Mutex(false"LoveJenny OneAtATimeDemo"))
            {
                
if (!mutex.WaitOne(TimeSpan.FromSeconds(3), false))
                {
                    Console.WriteLine(
"只能运行一个应用程序!");
                    
return;
                }

                RunProgram();
            }
        }

 

2:Semaphore:

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

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

下面是个例子:

    class TheClub
    {
       
//只能容纳三个人的酒吧
        static SemaphoreSlim _sem = new SemaphoreSlim(3);

        
public static void MainThread()
        {
            
for (int i = 1; i <= 5; i++)
                
new Thread(Enter).Start(i); //有5个人向进入
        }
        
static void Enter(object id)
        {
            Console.WriteLine(id 
+ " 想要进入了");
            _sem.Wait();
            Console.WriteLine(id
点击复制链接 与好友分享!回本站首页
相关TAG标签 上篇 线程
上一篇:Linux开发必须知道的
下一篇:深入浅出多线程系列之四:简单的同步 lock
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站