在多线程开发中,共享对象的同步是经常遇到的问题,以下总结了C#中线程同步的几种技术:
1,InterLocked原子操作
Decrement(ref int location);递减1
Add(ref int location1, int value);location1+value
Increment(ref int location);递增1
2,Mutex互斥锁
WaitOne(int timeout);等待获取锁
ReleaseMutex();释放锁,记得一定要释放,否则永远被阻塞
3,SemaphoreSlim信号量
SemaphoreSlim(int count);允许的并发线程数量
Wait();等待
Release();释放
4,AutoRestEvent自动重置时间(内核模式)
Set();从一个线程向另一个线程发送通知;
WaitOne();等待通知
5,ManaulResetEventSlim手动重置时间(混合模式)
Wait();等待
Set();通知
Reset();重置
6,CountDownEvent计数事件
CountdownEvent(int count);通知计数
Signal();计数(线程完成一定调用)
Wait();等待
Dispose();释放
7,Barrier
Barrier(int participantCount, Action<Barrier> postPhaseAction);多个线程同步,回调Action
SignalAndWait();执行回调
8,ReaderWriterLockSlim读写锁
EnterReadLock();获取读锁(可共享读)
ExitReadLock();释放读锁
EnterUpgradeableReadLock();获取读锁(可升级到写锁);
ExitUpgradeableReadLock();释放升级读锁
EnterWriteLock();获取写锁(其他线程不可读写)
ExitWriteLock();释放写锁
9,SpinWait自旋等待(混合模式)
SpinOnce();自旋