본문 바로가기
프로그래밍/Unity

Interlocked 클래스

by 뽀도 2015. 6. 4.

[출처 : 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

댓글