닷넷/C#
C# Interlocked.Increment에 대한 고찰
FreeBear
2023. 7. 20. 10:33
반응형
DB에서 인덱스를 자동증가 시키는 칼럼을 만들 수 있는 것처럼 C#에서 하나의 프로퍼티를 자동증가 인덱스로 만든 방법이 없을까 고민해보다가 챗GPT가 알려준 방법인 Interlocked.Increment를 사용했었다.
첫 번째 방법, 생성자에서 초기화
public class Info
{
// ... existing properties ...
private static int currentIndex = 0;
public int Index { get; }
public Info()
{
Index = Interlocked.Increment(ref currentIndex);
}
}
두 번째 방법, 리스트에 추가할 때 인덱스 값 설정
public class Info
{
// ... existing properties ...
private static int currentIndex = 0;
public int Index { get; private set; }
public static void AddInfo(List<Info> list, Info info)
{
info.Index = Interlocked.Increment(ref currentIndex);
list.Add(info);
}
}
테스트를 해보았을 때 내가 의도한대로 문제없이 잘 작동되는 코드여서 내 코드에 사용하였는데,
시간이 지나 갑자기 든 의문.
Interlocked는 뭐길래, 이게 무슨 원리로 이렇게 되는 걸까?
int 최대값 안에서 정말 문제없이 작동되는 것일까?
갑자기 순서가 바뀌는 일이 생기지는 않을까?
갑자기 Index가 0이 되는 일은 없을까?
등등
1. 관련 자료 찾기
Interlocked.Increment 메서드 (System.Threading)
원자 단위 연산으로 지정된 변수를 증가시키고 결과를 저장합니다.
learn.microsoft.com
C# 쓰레드 이야기 - 13. Interlocked, Heap
C# 쓰레드 이야기 - 13. Interlocked, Heap
저자: 한동훈(traxacun@unitel.co.kr)지난 시간까지 다양한 동기화 객체에 대해서 살펴보았다. 이렇게 살펴본 것들에는 뮤텍스, 이벤트, 모니터등이 있다. 힙에 대해서 살펴볼 것이며, 닷넷 환경에서
m.hanbit.co.kr
2. 정리
3. 결론
반응형