.net 多執行緒同步方式總結
在多執行緒開發中,共享物件的同步是經常遇到的問題,以下總結了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();自旋