1. 개요
C#으로 비동기 함수를 구현할때, 변수의 값을 증가시킬 때에 동기 함수를 구현했을때와는 다르게 Interlocked.Increment메서드를 사용하게 되어 이 메서드의 역할이 궁금해서 찾아보게 되었다.
2. Interlocked.Increment 메서드란?
Interlocked.Increment 메서드는 원자적(atomic)인 증가 연산을 수행하는 메서드이다.
원자적 연산은 여러 스레드가 동시에 접근하여 값을 증가시키는 경우에도 데이터의 무결성을 보장하기 위해 사용된다.
3. Interlocked.Increment 메서드를 사용하는 이유
일반적으로 변수의 값을 증가시키는 연산은 여러 스레드에서 동시에 수행될 수 있다.
이 경우 여러 스레드가 동시에 값을 읽어 증가시킨 다음, 각각의 스레드가 업데이트된 값을 저장하려고 할 때 충돌이 발생할 수 있다. 예를 들어, 스레드 A와 스레드 B가 동시에 값을 읽고 증가시킨 다음, 둘 다 값을 1 증가시킨 값을 저장하려고 하면 두 번째 스레드가 저장하는 값이 첫 번째 스레드가 저장한 값을 덮어쓸 수 있다.
Interlocked.Increment 메서드는 이러한 문제를 방지하기 위해 원자적인 증가 연산을 수행한다. 여러 스레드가 동시에 Interlocked.Increment 메서드를 호출하면, 한 번에 한 스레드만이 값을 증가시키고 그 결과를 반환한다. 다른 스레드는 자신의 차례가 될 때까지 대기하게 된다. 이렇게 하면 여러 스레드가 동시에 값을 증가시키는 경우에도 정확하게 값을 증가시킬 수 있다.
Interlocked.Increment 메서드는 다른 원자적인 연산인 Interlocked.Decrement, Interlocked.Add, Interlocked.Exchange 등과 함께 사용되어 스레드 간의 안전한 데이터 처리를 도와준다.
#References
https://learn.microsoft.com/ko-kr/dotnet/api/system.threading.interlocked.increment?view=net-7.0
https://m.hanbit.co.kr/network/category/category_view.html?cms_code=CMS2117503016
'Language > C#' 카테고리의 다른 글
[.NET] Garbage Collector에 대해 (0) | 2023.07.20 |
---|---|
[C#] int형 변수끼리 나눗셈 결과 소숫점 이하 값이 버려지는 현상 (0) | 2023.07.02 |
[C#] Array와 List의 차이점, 각각을 어느 상황에 써야 할까? (2) | 2023.01.28 |
[C#] Dictionary에 대해 (0) | 2023.01.28 |
[C#] 두 List가 같은지 비교하기 (0) | 2022.10.30 |