C#线程等待句柄

互斥对象 Mutex

private Mutex m = new Mutex();

public void Method(){
    m.WaitOne();
    //执行操作
    m.ReleaseMutex();
}

共享资源Semaphore

Semaphore是一个信号量,可以让多个资源分类型的同时进行。书中一个重要的有代表性的例子就是图书馆有多个电脑,有若干个人使用电脑的问题。是一个不错的例子。

有一个计数器,当信号量达到指定的最大值,就会阻塞。等待释放信号。方便协调工作。

思考:semaphore可以用作某个需要大量发送数据,但是有限的线程来处理的情况,比如说1200个人需要同时受到一条信息,但是用了40个线程来发送。

轻量级的SemaphoreSlim

SemaphoreSlim和semaphore的作用是一样的。但是SempahoreSlim是轻量级的,不是内核级别的,所以消耗资源比较少,效率更高,个人十分喜欢轻量级的东西。

EventWaitHandle 等待事件的发生

主要分为:ManualResetEvent和AuthoResetEvnt两个

主要是设计一个无限循环的函数来等待条件到来以后执行某个事情。在事情到来前,先停下来等待。

个人在现货交易软件中,行情的发送使用了ManualRestEvent。因为我们无法确定行情什么时候到来,所以让行情到来之前等待,行情一旦受到,立马.Set(),释放信号。

CountDownEvent 倒计时计数器

当所有的计数到了0以后,阻塞才会放开,让系统继续执行。

这个函数可以用在需要多个线程执行某些操作,条件具备以后。开始执行下一步的操作,比如在金融分析系统登录前,我们需要下载系统品种,历史数据,新闻消息,等等多个信息的下载,这些信息的下载不适合在一个线程中去执行。我们把每个操作一个线程,等这些线程都结束以后,我们开始开启主程序。用CountDownEvent非常合适

分阶段同步 Barrier

书中举得例子很好,小王和小李相约去参观鸟巢,小王和小李各自从自己的家出发,会到鸟巢门口集合。集合以后去参观鸟巢,参观完了以后。然后各自回家。

小王和小李,每个人的情况不一样,所以他们需要等待彼此都到了鸟巢以后,再开始参观,参观的时间可能也不太一样,等参观完了,需要集结。然后再各自回家,每一个集结点,都是一个分步。适合用barrier.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-08 13:40:24

C#线程等待句柄的相关文章

C#多线程:深入了解线程同步lock,Monitor,Mutex,同步事件和等待句柄(中)

本篇继续介绍WaitHandler类及其子类 Mutex,ManualResetEvent,AutoResetEvent的用法..NET中线程同步的方式多的让人看了眼花缭乱,究竟该怎么去理解呢?其实,我们抛开.NET环境看线程同步,无非是执行两种操作:一是互斥/加锁,目的是保证临界区代码操作的"原子性":另一种是信号灯操作,目的是保证多个线程按照一定顺序执行,如生产者线程要先于消费者线程执行..NET中线程同步的类无非是对这两种方式的封装,目的归根结底都可以归结为实现互斥/ 加锁或者是

线程学习笔记 等待句柄和线程池(摘自https://blog.gkarch.com/threading/part2.html#manualresetevent)

//如果你的应用有很多线程,这些线程大部分时间都在阻塞,那么可以通过调用ThreadPool.RegisterWaitForSingleObject来减少资源消耗.这个方法接受一个委托,它会在向等待句柄发信号时执行.当处于等待状态时,它不会浪费线程资源: static ManualResetEvent _starter = new ManualResetEvent (false); public static void Main() { RegisteredWaitHandle reg = Th

使用事件等待句柄EventWaitHandler 实现生产者、消费者队列

using System; using System.Threading; using System.Collections.Generic; class ProducerConsumerQueue : IDisposable { EventWaitHandle _wh = new AutoResetEvent (false); Thread _worker; readonly object _locker = new object(); Queue<string> _tasks = new

C# 多线程(lock,Monitor,Mutex,同步事件和等待句柄)

本文来自:http://www.cnblogs.com/SkySoot/archive/2012/04/02/2430295.html 本篇从 Monitor,Mutex,ManualResetEvent,AutoResetEvent,WaitHandler 的类关系图开始,希望通过本篇的介绍能对常见的线程同步方法有一个整体的认识,而对每种方式的使用细节,适用场合不会过多解释. 让我们来看看这几个类的关系图: 1. lock 关键字     lock 是 C# 关键词,它将语句块标记为临界区,确

对线程等待函数pthread_join二级指针参数分析

分析之前先搞明白,这个二级指针其实在函数内部是承接了上个线程的返回值. 看man手册,发现返回值是个普通指针.人家用二级指针来承接,可能准备干大事.这个可以自己搜索一下.原因嘛,二级指针是保存了这个地址.一级指针承接的话就是这个地址. 那既然二级指针保存了,我们如何访问那?开始我觉得直接来个二级指针,然后*访问算了,但是下面的东西.让你不能那么干了!其实非要那样也可以 malloc呗! 线程创建函数pthread_create的函数原型如下: int pthread_create(pthread

线程等待——CountDownLatch使用

告警性能优化过程中,遇到如下问题:1. 在数据库计算几十万个实体的KPI值的方差:2. 计算结果进行表格化处理. 这里KPI包含多个Counter的数据库函数运算(比如Decode,AVG等函数),方差也是数据库函数运算,性能比较差. 步骤1中每个实体独立计算方差,步骤2需要方差结果协同处理,所以很自然的联想到步骤1分实体多线程处理,步骤2等待步骤1所有线程完成后才开始处理.这里我们使用CountDownLatch进行线程等待,示例代码如下: package com.coshaho.thread

java 多线程—— 线程等待与唤醒

java 多线程 目录: Java 多线程——基础知识 Java 多线程 —— synchronized关键字 java 多线程——一个定时调度的例子 java 多线程——quartz 定时调度的例子 java 多线程—— 线程等待与唤醒 概述 第1部分 wait(), notify(), notifyAll()等方法介绍 第2部分 wait()和notify()示例 第3部分 wait(long timeout)和notify() 第4部分 wait() 和 notifyAll() 第5部分 

SQL点滴13—收集SQLServer线程等待信息

原文:SQL点滴13-收集SQLServer线程等待信息 要知道线程等待时间是制约SQL Server效率的重要原因,这一个随笔中将学习怎样收集SQL Server中的线程等待时间,类型等信息,这些信息是进行数据库优化的依据. sys.dm_os_wait_stats 这是一个系统视图,里面存储线程所遇到的所有的等待信息,具体的列如下表 列名 数据类型 说明 Wait_type Nvarchar(60) 等待类型名称 waiting_tasks_count Bigint 等待类型的等待数.该计数

GCD线程依赖,GCD队列组,线程监听,线程等待

1.线程监听 有时候经常有这样的需求,AB任务都执行完成之后,刷新界面或者执行其他操作, /** * 队列组 dispatch_group_notify */ - (void)groupNotify { NSLog(@"begin"); dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORIT