OS&네트워크

운영체제 #3_ 상호잠금, InterlockedIncrement 함수

Tigercow.Door 2017. 11. 9. 18:36


이번에는 상호잠금 함수인 InterlockedIncrement에 대해서 알아보겠습니다.

먼저 msdn에서 해당 함수를 살펴보면 아래와 같습니다.


LONG __cdecl InterlockedIncrement(

_Inout_ LONG volatile *Addend);


이를 살펴보면 해당함수는 LONG형(32bit) 포인터 변수를 인자로 받는다는 것을 알 수 있습니다.

따라서 여러 스레드에서 공유되는 데이터의 값을 하나 씩 증가시킬때는,

해당 데이터를 LONG형으로 선언하고 아래와 같이 사용하면 됩니다.


InterlockedIncrement(&(LONG형 변수));


추가적으로, 위와 같은 함수를 위에서 언급하였듯이 상호잠금 함수라고 합니다.

값을 1씩 증가시켜주는 InterlockedIncrement() 함수 뿐 아니라,

값을 1씩 감소시켜주는 InterlockedDecrement() 함수도 존재합니다.


이때 주의할 점이 있습니다.

만약 값을 2만큼 증가시키기 위해서는 InterlockedIncrement() 함수를 2번 호출해서는 안됩니다.

그 두번의 호출 사이에 다른 스레드가 실행될 가능성이 있기 때문입니다.

이런 상황에서는 InterlockedExchangeAdd() 함수를 이용하면 됩니다.

728x90