WaitHandle——使用Semaphore

简介:     semaphore也继承自waithandle,它用于锁机制,与Mutex不同的是,它允许指定数量的线程同时访问资源,在线程超过数量以后,则进行排队等待,直到之前的线程退出。     Semaphore很适合应用于web服务器这样的高并发场景,可以限制对资源访问的线程数。



    semaphore也继承自waithandle,它用于锁机制,与Mutex不同的是,它允许指定数量的线程同时访问资源,在线程超过数量以后,则进行排队等待,直到之前的线程退出。

    Semaphore很适合应用于web服务器这样的高并发场景,可以限制对资源访问的线程数。


    Monitor与monitor都有一个锁持有者,而semaphore则不需要,因此通常将sempahore声明为静态的。


 

   来看下面的示例:


namespace 使用Semaphore
{
    class Program
    {

         //第一个参数指定当前运行多少条线程进入,第二个参数表示 允许多少个线程同时进入
        static Semaphore sem = new Semaphore(2, 2); 


        static void Main(string[] args)
        {
            for (int i = 1; i <=4; i++)
            {
                new Thread (ThreadEntry).Start (i);


            }
        } 

        static void ThreadEntry(object id) {

            Console.WriteLine("thread {0} wants to get in",id);
            sem.WaitOne();  //在调用waitone方法时,如果有空位,则占位;如果没有,则等待;
            Console.WriteLine("thread {0} gets in",id );
            Thread.Sleep(100);
            Console.WriteLine("thread {0} is leaving",id );
            sem.Release();  //释放一个空位;

        
        }
    }
}


调用结果:



 



     设想下,如果有一个抢票的页面,所有人同一时刻并发访问,可以用此对象设置好并发的人数和同时可以有多少人进入等待状态。其他人可以排到一个队列中,如果队列过长的话,会造成服务器内存消耗过多,这时,可以采用分布式的方法,把队列分配到不同的主机上,减轻服务器压力。


   以上设想还未在实践中使用过,但是学习了两天如何处理高并发问题,这也算是理出来的一个思路吧。






目录
相关文章
|
3月前
|
数据库连接
认识 Semaphore
认识 Semaphore
19 0
|
8月前
Semaphore 使用详解
本文主要对Semaphore 的相关知识点进行了介绍和讲解
53 0
|
4月前
多线程并发之Semaphore(信号量)使用详解
多线程并发之Semaphore(信号量)使用详解
93 0
|
Java 数据库连接 API
【JUC】信号量Semaphore详解
【JUC】信号量Semaphore详解
135 0
【JUC】信号量Semaphore详解
Semaphore(信号量)介绍以及实例
Semaphore(信号量)介绍以及实例
136 0
Semaphore(信号量)介绍以及实例
|
Java
呵,Semaphore ,就这?(二)
那么本篇文章我们继续来和你聊聊并发工具类的第二篇文章 --- Semaphore 。
96 0
呵,Semaphore ,就这?(二)
|
监控 数据库连接
呵,Semaphore ,就这?(一)
那么本篇文章我们继续来和你聊聊并发工具类的第二篇文章 --- Semaphore 。
103 0
呵,Semaphore ,就这?(一)
|
Java
Java并发编程之Semaphore信号量
Java并发编程之Semaphore信号量
117 0
Java并发编程之Semaphore信号量
Semaphore信号量
Semaphore 可以用来限制或管理数量有限资源的使用情况 - 信号量的作用是用来维护一个“许可证”,的计数,线程可以获取 许可证,那信号量剩余许可证就减一,线程也可以是否一个许可证,那剩余的许可证就加一,当信号量拥有的许可证为0时,那么下一个线程想获得许可证,就要进行等待,直到另外线程释放许可证
255 0
Semaphore信号量
信号量Semaphore的使用
允许多个线程同时访问:信号量(Semaphore) 信号量为多线程协作提供了更为强大的控制方法。广义上说,信号量是对锁的扩展。无论是内部锁synchronized还是重入锁ReentrantLock,一次都只允许一个线程访问一个资源,而信号量指定多个线程访问同一个资源。
1294 0