멀티쓰레드 프로그래밍

Interlocked

우대비 2024. 2. 23. 20:12
반응형

"Interlocked" 클래스는 C#에서 스레드 안전성을 보장하는 간단한 연산을 수행하는 데 사용됩니다. 이 클래스는 System.Threading 네임스페이스에 속해 있으며, 여러 스레드가 동시에 같은 변수에 접근하려고 할 때 발생할 수 있는 경쟁 조건(race conditions)을 방지하는 데 유용합니다. Interlocked 클래스를 사용하면 원자적 연산을 수행할 수 있어, 데이터의 일관성과 무결성을 유지할 수 있습니다.

Interlocked 클래스는 다음과 같은 메서드를 제공합니다:

  • Add: 변수에 값을 안전하게 더합니다.
  • Increment: 변수의 값을 안전하게 1 증가시킵니다.
  • Decrement: 변수의 값을 안전하게 1 감소시킵니다.
  • Exchange: 두 변수의 값을 안전하게 교환합니다.
  • CompareExchange: 지정된 값이 예상 값과 일치하는 경우 변수의 값을 안전하게 교체합니다.

아래는 C#에서 Interlocked 클래스를 사용하는 예시 코드입니다

using System;
using System.Threading;

class InterlockedExample
{
    private static int count = 0;

    public static void Main()
    {
        // 10개의 스레드를 생성하고 시작
        Thread[] threads = new Thread[10];
        for (int i = 0; i < threads.Length; i++)
        {
            threads[i] = new Thread(IncrementCount);
            threads[i].Start();
        }

        // 모든 스레드가 완료될 때까지 기다림
        foreach (Thread t in threads)
        {
            t.Join();
        }

        Console.WriteLine($"Final count: {count}");
    }

    public static void IncrementCount()
    {
        // count 변수를 안전하게 1 증가
        Interlocked.Increment(ref count);
    }
}

 

위의 예시에서는 Interlocked.Increment 메서드를 사용하여 여러 스레드에서 공유하는 count 변수를 안전하게 증가시키는 방법을 보여줍니다. 이 방법을 사용하면, 여러 스레드가 count 변수에 동시에 접근하더라도 데이터의 무결성이 유지됩니다.

반응형
LIST

'멀티쓰레드 프로그래밍' 카테고리의 다른 글

Context Switching  (0) 2024.02.26
SpinLock  (0) 2024.02.23
DeadLock  (0) 2024.02.23
Locking  (0) 2024.02.23
memory barrier  (0) 2024.02.23