본문 바로가기
C#

[C#] Interlocked

by 소리쿤 2023. 3. 20.

위와 같은 코드를 작성했을 때, 예상 했던 바처럼 number가 0이 되지 않는다.

그 이유는

실제 어셈블리 코드가 다음처럼 동작하기 때문에, 원자성이 보장되지 않음

 

이를 해결하기 위해선,

 

Interlocked를 사용하여 원자성을 보장해주면 됨

 

Interlocked 클래스는 하드웨어 시그널을 통해 다른 CPU가 해당 메모리에 접근하지 못하도록 막는다고 함. 

https://jungwoong.tistory.com/41

 

[window c++] InterLocked 함수들

스레드 동기화가 필요한 이유 스레드에 관련된 글에서 설명 한 것 처럼 프로세스에 속한 스레드들은 프로세스의 리소스 자원을 공유합니다. 또한 시스템의 힙, 파일, 윈도우등등 많은 시스템 리

jungwoong.tistory.com

https://learn.microsoft.com/ko-kr/dotnet/api/system.threading.interlocked?view=net-7.0 

 

'C#' 카테고리의 다른 글

[C#] IComparable과 IComparer  (0) 2023.03.26
[C#] Dispose 패턴  (0) 2023.03.23
[C#] 메모리 베리어 예제  (0) 2023.03.06
[C#] 캐시 Special Locality 테스트  (0) 2023.03.05
[C#] 컴파일러 최적화로 인한 데드락 예제  (0) 2023.03.03