본문 바로가기
728x90

Interlocked2

[쓰레드 동기화]스핀 락(Spin Lock) 구현 스핀 락 스핀락은 폴링 방식의 동기화 처리를 하는 방식이다. 마이크로 프로세서 에서 내부 인터럽트를 사용하지 않고 값의 state 가 바뀌는지 while(1) 을 이용하여 확인 하는것과 같다. 한 가지 예를 보자 num 이라는 데이터를 첫번째 스레드에선 +1 씩 계속 증가시키고 두번째 스레드에선 -1 씩 계속 감소시키는 행위를 각각 10만번 씩 하면 직관적으로는 당연히 프로그램이 뻗지 않는이상 당연히 0이 나올 것이다. 하지만 이전 포스팅에서 자원 접근에 대한 동기화가 이루어 지지 않으면 한 쪽에서 값을 변경 시켜도 다른 쪽에선 이전에 가지고 있던값을 최신이라고 저장하고 있다가 값을 변경시키는 현상이 발생하므로 의도했던 데이터 갱신이 이루어지지 않는다. 이를 해결하기 위해 첫번째 폴링 방식의 스핀락을 구.. 2020. 7. 20.
[쓰레드 동기화] Interlocked (공유자원과 임계구역) https://docs.microsoft.com/ko-kr/dotnet/api/system.threading.interlocked?view=netcore-3.1 Interlocked Class (System.Threading) 다중 스레드에서 공유하는 변수에 대한 원자 단위 연산을 제공합니다.Provides atomic operations for variables that are shared by multiple threads. docs.microsoft.com Remarks 이 클래스의 메서드는 스레드는 다른 스레드에서 액세스할 수 있는 변수를 업데이트 하는 동안 스케줄러 컨텍스트를 전환 하는 경우 또는 별도 프로세스에서 두 스레드가 동시에 실행 중일 때 발생할 수 있는 오류 로부터 보호할 수 있습니다.. 2020. 7. 18.
728x90