C#线程等待句柄

时间:2023-03-09 18:25:39
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.