semaphore

简介:

semaphore和mutex相似,但是semaphore可以被多个线程同时使用。semaphore好比一个计数的mutex,它可以定义一个线程数,允许多线程同时访问资源。当某些资源只允许一些指定数量的线程访问时,semaphore就很有用。比如,当你访问IO端口,有3个端口可以使用,这时3个线程可以同时访问这些端口。而第四个线程则必须等待资源被其中一个线程释放才能访问这些资源。

.NET 4 提供了2个semaphore功能:Semaphore和SemaphoreSlim。Semaphore可以被命名,可以使用整个系统的资源,允许同步于不同的进程。SemaphoreSlim则是一个轻量级的版本,为较短时间的等待做过优化。

semaphore由System.Threading.Semaphore实现,它有几个构造函数,最简单的构造函数如下:
public Semaphore(int initialCount, int maximumCount)

这里,initialCount指定了初始的时候Semaphore所允许的线程数,maximumCount则传递了最大的线程数。
 

 

private static Semaphore room = new Semaphore(1, 3);

        static void Main(string[] args)
        {

            for (int i = 0; i < 5; i++)
            {
                Thread t = new Thread(peoplegotoroom);
                t.Start(i);
            }
        }

        private static void peoplegotoroom(object num)
        {
            Console.WriteLine(num.ToString() + "want to in");
            room.WaitOne();
            Console.WriteLine(num.ToString() + "in");
            Thread.Sleep(5000);
            
            Console.WriteLine(num.ToString() + "want to out");
            room.Release();
            Console.WriteLine(num.ToString() + "out");

        }



















本文转自cnn23711151CTO博客,原文链接:http://blog.51cto.com/cnn237111/516256 ,如需转载请自行联系原作者


相关文章
|
2月前
|
Java
JAVA并发编程系列(7)Semaphore信号量剖析
腾讯T2面试,要求在3分钟内用不超过20行代码模拟地铁安检进站过程。题目设定10个安检口,100人排队,每人安检需5秒。实际中,这种题目主要考察并发编程能力,特别是多个线程如何共享有限资源。今天我们使用信号量(Semaphore)实现,限制同时进站的人数,并通过信号量控制排队和进站流程。并详细剖析信号量核心原理和源码。
Semaphore 使用详解
本文主要对Semaphore 的相关知识点进行了介绍和讲解
105 0
|
6月前
|
数据库连接
认识 Semaphore
认识 Semaphore
48 0
|
Java 数据库连接 API
【JUC】信号量Semaphore详解
【JUC】信号量Semaphore详解
171 0
【JUC】信号量Semaphore详解
Semaphore(信号量)介绍以及实例
Semaphore(信号量)介绍以及实例
177 0
Semaphore(信号量)介绍以及实例
|
监控 数据库连接
呵,Semaphore ,就这?(一)
那么本篇文章我们继续来和你聊聊并发工具类的第二篇文章 --- Semaphore 。
125 0
呵,Semaphore ,就这?(一)
|
Java
呵,Semaphore ,就这?(二)
那么本篇文章我们继续来和你聊聊并发工具类的第二篇文章 --- Semaphore 。
124 0
呵,Semaphore ,就这?(二)
并发编程之Semaphore信号量
`Semaphore` 翻译过来就是信号量, 其根本原理就是基于 `CAS` 共享锁的一种实现。举一个例子。 假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入一辆,如果又离开两辆,则又可以放入两辆,如此往复。
164 0
|
Java
Java并发编程之Semaphore信号量
Java并发编程之Semaphore信号量
151 0
Java并发编程之Semaphore信号量
Semaphore信号量
Semaphore 可以用来限制或管理数量有限资源的使用情况 - 信号量的作用是用来维护一个“许可证”,的计数,线程可以获取 许可证,那信号量剩余许可证就减一,线程也可以是否一个许可证,那剩余的许可证就加一,当信号量拥有的许可证为0时,那么下一个线程想获得许可证,就要进行等待,直到另外线程释放许可证
276 0
Semaphore信号量