WPF & C# - Interlocked ( 멀티쓰레딩에서 변수 변경 시 필수 / lock 대체 / 멀티쓰레드 / MultiThread / Threading )
WPF & C# - Interlocked ( 멀티쓰레딩에서 변수 변경 시 필수 / lock 대체 / 멀티쓰레드 / MultiThread / Threading ) |
동시에 여러 쓰레드에서 외부 변수를 POP 하거나 Peek 할 때 문제가 발생할 수 있다.
( POP, Peek 뭔 말인지 잘 모르겠다. 어쨌든 문제가 되는부분은 변수를 읽을때는 아니고 변경할 때를 말하는 듯 하다. )
한 쓰레드에서 외부 변수를 변경하고 있을 때, 다른 쓰레드에서 그 변수를 읽는다면 전혀 다른 값이 발생 할 수 있다는 뜻이다.
이를 해결하기 위한것이 lock 였다.
그러나 lock 속도를 많이 잡아먹고 잘못 사용할 경우 교착상태에 빠지는등의 이슈가 발생되는 문제가 발생한다.
이를 방지하고자 나온것이 Interlocked 이다.
Interlocked 를 사용할 때 외부변수를 변경하는 것이기 때문에 반드시 ref 를 사용하여 변경해야 한다.
기존의 lock에 비해서 시간소요가 1/3 밖에 되지 않는다고 하며, 락을 걸고 푸는 것이 자동으로 이루어져 교착상태에 빠질 위험성이 없다고 한다.
아래 좋은 사이트들을 좀 더 참고하자.
참고
docs.microsoft.com/ko-kr/windows/win32/sync/interlocked-variable-access
Interlocked Variable Access - Win32 apps
Applications must synchronize access to variables that are shared by multiple threads.
docs.microsoft.com
아래 사이트에서 잘 정리해 주었다.
[프로그래밍] 멀티 쓰레딩 기본 - 스택과 CAS 연산
<큐와 스택 멀티쓰레딩>큐와 스택은 전체적인 동작 방식은 다르지만, 세부적인 동작 방식은 완전히...
blog.naver.com