이번에는 상호잠금 함수인 InterlockedIncrement에 대해서 알아보겠습니다.
먼저 msdn에서 해당 함수를 살펴보면 아래와 같습니다.
LONG __cdecl InterlockedIncrement(
_Inout_ LONG volatile *Addend);
이를 살펴보면 해당함수는 LONG형(32bit) 포인터 변수를 인자로 받는다는 것을 알 수 있습니다.
따라서 여러 스레드에서 공유되는 데이터의 값을 하나 씩 증가시킬때는,
해당 데이터를 LONG형으로 선언하고 아래와 같이 사용하면 됩니다.
InterlockedIncrement(&(LONG형 변수));
추가적으로, 위와 같은 함수를 위에서 언급하였듯이 상호잠금 함수라고 합니다.
값을 1씩 증가시켜주는 InterlockedIncrement() 함수 뿐 아니라,
값을 1씩 감소시켜주는 InterlockedDecrement() 함수도 존재합니다.
이때 주의할 점이 있습니다.
만약 값을 2만큼 증가시키기 위해서는 InterlockedIncrement() 함수를 2번 호출해서는 안됩니다.
그 두번의 호출 사이에 다른 스레드가 실행될 가능성이 있기 때문입니다.
이런 상황에서는 InterlockedExchangeAdd() 함수를 이용하면 됩니다.
728x90
'OS&네트워크' 카테고리의 다른 글
[네트워크] 라우팅 알고리즘(Routing algorithm), 다익스트라 알고리즘(Dijkstra algorithm) (2) | 2017.11.14 |
---|---|
[네트워크] OSI 7 계층 모델 (4) | 2017.11.13 |
운영체제 #4_ CriticalSection 에 대해서 (0) | 2017.11.09 |
운영체제 #2_ C언어를 통한 스레드/멀티스레드 예제 (2) | 2017.10.26 |
운영체제 #1_ 스레드와 프로세스, 멀티프로그래밍,멀티태스킹,멀티스레딩,멀티프로세싱 (2) | 2017.10.26 |