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