[출처 : https://msdn.microsoft.com/ko-kr/library/system.threading.interlocked(v=vs.110).aspx]
[출처 : http://www.hanbit.co.kr/network/view.html?bi_id=379]
Interlocked 클래스
: 다중 스레드에서 공유하는 변수에 대한 동기화를 제공한다.
항상 유효한 값을 얻도록 보장한다 , 여러 쓰레드가 항상 유효한 값을 갖도록 하려면 변수에 직접 억세스 하지 말고
Interlocked 클래스를 사용하도록 한다.
using System; using System.Threading; public class AppMain { private int m_member; public static void Main() { AppMain ap = new AppMain(); ap.DoTest(); } private void DoTest() { Thread thread1 = new Thread(new ThreadStart(Incrementer)); Thread thread2 = new Thread(new ThreadStart(Decrementer)); thread1.Start(); thread2.Start(); } private void Incrementer() { Random rdm = new Random( unchecked((int)DateTime.Now.Ticks) ); for ( int loopctr = 0; loopctr < 10; loopctr++) { Interlocked.Increment(ref m_member); Console.WriteLine("Incrementer : {0}", m_member.ToString()); Thread.Sleep(rdm.Next(1, 200)); } } private void Decrementer() { Random rdm = new Random( ~unchecked((int)DateTime.Now.Ticks) ); for ( int loopctr = 0; loopctr < 10; loopctr++) { Interlocked.Decrement(ref m_member); Console.WriteLine("Decrementer : {0}", m_member.ToString()); Thread.Sleep(rdm.Next(1, 300)); } } }자주 쓰는 메서드
Decrement int/long을 감소 시킨다.
InCrement int/long을 증가 시킨다.
Exchange (int,int)(long,long)(object,object)(single,sling)등 지정된 값을 설정하고 원래 값 반환
CompareExchange (int,int)(long,long)(object,object)(single,sling)등 지정된 값을 비교하고 같으면 두 값 중 하나를 바꾼다.