[출처 : 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)등 지정된 값을 비교하고 같으면 두 값 중 하나를 바꾼다.
반응형
'프로그래밍 > Unity' 카테고리의 다른 글
[c#] Base 키워드 (0) | 2015.06.08 |
---|---|
What is the difference between a thread and fiber? (0) | 2015.06.04 |
[c#] 속성 : property (0) | 2015.05.28 |
IDisposable 인터페이스 (0) | 2015.05.28 |
코루틴 (0) | 2015.05.20 |
댓글