C# semphore的使用
”信号量非常类似于互斥,信号量可以同时由多个线程使用。
信号量是一种计数的互斥锁定,可以定义允许同时访问受旗语锁定保护的资源的线程个数。
如果需要限制可用资源的线程数,信号量就非常有用。例如,如果系统有3个物理端口可用,就允许3个线程同时访问I/O端口,但第4个线程就需要等待前3个线程中的一个释放资源。
.NET4.5位信号量功能提供了两个类Semphore和SemphoreSlim。Semphore类可以命名,使用系统内的资源,允许在不同进程之间同步。SemphoreSlim类对较短等待时间进行了优化的轻型版本。”
using System;
using System.Windows.Forms;
using System.Threading.Tasks;
using System.Threading; namespace UnitTest
{
class Program
{
static void Main(string[] args)
{
int taskCount = ;
int semaphoreCount = ;
var semaphore = new SemaphoreSlim(,);
var tasks = new Task[taskCount]; for (int i = ; i < taskCount; i++)
{ tasks[i] = Task.Factory.StartNew(()=>TaskMain(semaphore));
} Task.WaitAll(tasks); Console.ReadLine();
} static void TaskMain(SemaphoreSlim semaphore)
{
bool isCompleted = false;
while (!isCompleted)
{
if (semaphore.Wait())
{
try
{
Console.WriteLine("Task {0} locks ths semphore {1}", Task.CurrentId,DateTime.Now.ToString(" HH:mm:ss.ffff")+" "+Task.CurrentId); Thread.Sleep();
}
finally
{
Console.WriteLine("Task {0} release the semphoreb {1}", Task.CurrentId,DateTime.Now.ToString(" HH:mm:ss.ffff"));
semaphore.Release();
isCompleted = true;
}
}
else
{
Console.WriteLine("Timeout for task {0};wait again {1}",Task.CurrentId,DateTime.Now.ToString(" HH:mm:ss.ffff")); }
}
}
}
}

参考:《C#高级编程》(第9版)P593
C# semphore的使用的更多相关文章
- java并发之同步辅助类(Semphore、CountDownLatch、CyclicBarrier、Phaser)
线程同步辅助类,主要学习两点: 1.上述几种同步辅助类的作用以及常用的方法 2.适用场景,如果有适当的场景可以用到,那无疑是最好的 semaphore(seməˌfôr) 含义 信号量就是可以声明多把 ...
- Java并发编程的4个同步辅助类(CountDownLatch、CyclicBarrier、Semphore、Phaser)
我在<jdk1.5引入的concurrent包>中,曾经介绍过CountDownLatch.CyclicBarrier两个类,还给出了CountDownLatch的演示案例.这里再系统总结 ...
- 并发工具类(三)控制并发线程的数量 Semphore
前言 JDK中为了处理线程之间的同步问题,除了提供锁机制之外,还提供了几个非常有用的并发工具类:CountDownLatch.CyclicBarrier.Semphore.Exchanger.Ph ...
- Semphore信号量的使用
前言:在多线程环境的同步中,我们为了让每个线程具有同步的作用,经常采用synchronize.reetrantlock等同步手段进行上锁,以便在同一时间只能有一个线程具有访问变量和读写变量的权力.然而 ...
- [CareerCup] 16.5 Semphore 信号旗
16.5 Suppose we have the following code:public class Foo { public Foo() { . . . } public void first( ...
- Linux进程通信 之 信号灯(semphore)(System V && POSIX)
一. 信号灯简介 信号灯与其他进程间通信方式不大相同,它主要提供对进程间共享资源访问控制机制. 相当于内存中的标志,进程可以根据它判定是否能够访问某些共享资源,同时,进程 也可以修改该标志.除了用于访 ...
- Linux系统中的信号量(semphore)与互斥体(mutex)
http://www.embexperts.com/viewthread.php?tid=31 两者最大区别:信号量可以允许多个线程进入临界区,而互斥体只允许一个线程进入临界区.本贴将描述信号量与互斥 ...
- Java 程序员们值得一看的好书推荐
"学习的最好途径就是看书",这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一 ...
- 【转】成为Java顶尖程序员 ,看这10本书就够了
“学习的最好途径就是看书“,这是我自己学习并且小有了一定的积累之后的第一体会.个人认为看书有两点好处: 1.能出版出来的书一定是经过反复的思考.雕琢和审核的,因此从专业性的角度来说,一本好书的价值远超 ...
随机推荐
- ActiveMQ进阶配置
配置web管理页面的安全认证 配置web管理页面的绑定IP和端口 配置MQ连接的安全认证 禁用不使用的连接协议 绑定协议连接端口到指定IP 使用MySql作为持久化保存 配置基于JDBC的高可用环境 ...
- POJ - 2828 Buy Tickets(线段树单点更新)
http://poj.org/problem?id=2828 题意 排队买票,依次给出当前人要插队的位置,每个人有个编号,然后问你最后整个的序列是什么? 分析 最后一个人的要插入的位置是确定的,所以逆 ...
- jQuery基础 (一)——样式篇(jQuery选择器)
一.选择器类型 id选择器 class选择器 元素选择器 层级选择器 全选择器(*选择器) 二.有几种方式可以隐藏一个元素: CSS display的值是none. type="hidden ...
- 转--利用hexo搭建个人静态博客
引用地址 可谓图文并茂,可以配合 七牛云存储(做图片等文件服务器),搭建好看的个人博客 hexo 官方指导文档 主题 官网教程 问题集锦 简书 http://blog.csdn.net/wx_9624 ...
- Neo4j安装&入门&一些优缺点
本篇将介绍Neo4j的安装,入门,和自己使用了一段时间后发现的优点缺点,争取简洁和实用. 如果你是第一次接触Neo4j,并且之前也都没接触过类似的Graph Database的话,建议先浏览一下我之前 ...
- JSON与对象的相互转换
json是一种轻量级的数据格式,(本质为字符串) 低版本可以使用json2.js插件来解决.下载地址:https://github.com/douglascrockford/JSON-js JSON语 ...
- C#中使用Application.AddMessageFilter(this)要手动释放
如题,要使用Application.RemoveMessageFilter(this);释放,如果不释放会造成很严重的内存泄漏.
- SNMP收集
http://velep.com/archives/416.html 协议基本格式
- Java开发中各种集合框架简介
在大数据MapReduce作业开发中,我们经常会遇到一些大小表的join,这是如果这个小表足够“小”的话,我们可以使用进行“map-join-side”,这要就可以有效的降低reduce端的压力,但是 ...
- MySql 安装与使用图文教程
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内, ...