반응형
"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 |