728x90
반응형
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
아래 사이트에서 잘 정리해 주었다.
728x90
반응형
'Programing (프로그래밍) > WPF & C# (C Sharp)' 카테고리의 다른 글
WPF & C# - TextBox 에서 ContextMenu 변경하기 ( SelectedText / 텍스트선택 / 마우스우클릭메뉴 ) (0) | 2021.03.17 |
---|---|
WPF & C# - RoundButton ( 둥근버튼 만들기 / CornerRadius / Style ) (0) | 2021.03.10 |
WPF & C# - Grid 만들기 (0) | 2021.03.08 |
WPF & C# - struct 구조체 (0) | 2021.03.03 |
WPF & C# - TextBoxWaterMark ( 워터마크 / 배경글자 / 텍스트박스 ) (0) | 2021.02.17 |
WPF & C# - 비동기 이벤트 - BackgroundWorker ( 백그라운드워커 / ChangedEvent / Completed / Event ) (0) | 2021.02.04 |
WPF & C# - 멀티쓰레딩 ( 멀티쓰레드 / MultiThread / Threading ) (1) | 2021.02.04 |
WPF & C# - Error 다른 스레드가 이 개체를 소유하고 있어 호출한 스레드가 해당 개체에 액세스할 수 없습니다 ( 에러 / 쓰레드 / Thread / Dispatcher.Invoke()) (0) | 2021.02.01 |