编程语言
首页 > 编程语言> > C# 线程同步相关类

C# 线程同步相关类

作者:互联网

1 Mutex-互斥体

Mutex可以用于线程同步也可以用于进程同步

使用方法:

// 新建一个Mutex实例,false指示调用线程(一般是创建该Mutex实例所在的进程)不具有互斥体mutex1的初始所有权

// 意味着第一个使用mutex1.WaitOne()方法的线程会立即得到该互斥体

Mutex mutex1=new Mutex(false);

 

mutex1.WaitOne(); // 阻止当前线程,直到收到信号

// 获取到该互斥体后,执行一些操作

mutex1.ReleaseMutex(); // 释放互斥体mutex1一次,作用是给被WaitOne阻塞的线程发送一次信号

 

如果在使用Mutex时报错“由于出现被放弃的 mutex,等待过程结束。”,很可能就是线程调用了WaitOne方法获取到该互斥体使用完后没有调用ReleaseMutex方法释放互斥体

 

2 Interlocked-为多个线程的共享变量提供原子操作

使用方法:

Interlocked.Increment(ref value); // 原子自增1
Interlocked.Decrement(ref value); // 原子自减1
Interlocked.Exchange(ref value, 3344); // 以原子操作的方式把value赋值为3344
Interlocked.Add(ref value, 100); // 以原子操作的方式使value加100

 

3 AutoResetEvent 和 ManualResetEventSlim-线程同步事件

https://www.cnblogs.com/tomorrow0/p/13905849.html

 

4 SemaphoreSlim-用于限制同时访问同一共享资源的线程数

使用方法:

public static SemaphoreSlim semaphoreSlim = new SemaphoreSlim(2); // 该semaphoreSlim 可以立即授权给两个线程,当已授权的线程数超过2个时,其它线程只能等待其它线程释放才能获取授权

semaphoreSlim.Wait(); // 等待进入该semaphoreSlim ,也可以异步等待(WaitAsync)

semaphoreSlim.Release() // 释放该semaphoreSlim 实例一次,允许一个等待的线程可以进入该semaphoreSlim 实例

 

5 CountdownEvent-在收到特定次数信号后使等待线程继续运行的同步基元

https://www.cnblogs.com/tomorrow0/p/14219995.html

 

6 Barrier-用于组织多个线程在及时在某个时刻会面

Barrier构造方法提供了一个回调函数,当使用该Barrier的线程调用SignalAndWait方法的次数达到Barrier指定注册数(Barrier构造函数指定)时该回调方法会执行

当Barrier的注册数 > 使用该Barrier的线程数 : 这时Barrier的回调方法不会执行,因为线程调用SignalAndWait方法的次数达不到Barrier指定注册数

当Barrier的注册数 < 使用该Barrier的线程数:报错“The number of threads using the barrier exceeded the total number of registered participants.”

 

标签:mutex1,同步,semaphoreSlim,Barrier,C#,互斥,线程,Mutex
来源: https://www.cnblogs.com/tomorrow0/p/14160018.html