삽질의 현장/- 윈도우 시스템

#020_WIndow_System_멀티 쓰레드 공유 메모리

shovelman 2015. 9. 24. 16:02


안녕하세요 삽잡이입니다.

이번 시간에는 쓰레드 동기화에 대해서 알아보려고 합니다.


쓰레드는 각각 독립적으로 움직이기 때문에, 공유 변수에 더욱 주의를 해야합니다.

그렇지 않으면 쓰레드에 정말로 많은 문제가 발생하게 됩니다.

공유 메모리에 신경쓰지 않게 되어 발생한 오류는

동기화와 관련된 문제로써 에러를 찾기 상대적으로 힘들어집니다.


여러개의 독립적인 쓰레드가 하나의 공유 메모리를 사용할 경우를 생각해보겠습니다.

만약, 0번째 쓰레드가 Write 중인데 나머지 쓰레드들은 Read를 하고 있다면,

메모리가 변경이 되는 것인데, Read를 하던 녀석들은 당황하겠지요...

결과적으로 Memory Fault가 발생하는데, 이 문제는 심각한 문제입니다.


강조하지만, 원천적으로 공유 메모리는 쓰레드에서는 문제가 많습니다.

하지만, 공유를 하지 않을 수는 없습니다.

왜냐, 필요한 경우들이 많이 생길 수 있기 때문입니다.


그렇다면, 이럴 때에는 어떻게 해결해야할까요?

이럴 때에는 서로 데이터가 호환 가능하도록 해야합니다.


쓰레드가 외부에 의존하도록 구현이 되면, 

외부에서 의존하던 데이터가 변경될 때 문제가 발생활 일들이 허다합니다.

따라서 자신의 정보는 자기가 같도록 만들어야될 필요성이 있습니다.

즉, 자기 자신만의 정보를 가지고 놀도록 하는 것이 바람직하다는 것입니다.


단, 완벽하게 자신만 가지고 있으면 외부에서 쓰레드를 컨트롤 할 수 없으니,

자기 내용을 독립적으로 자신이 가지고 있으면서도

외부에서 그 데이터에 접근할 수 있도록 하는 것이 바람직합니다.


여러 방법들이 있겠지만, 외부에서 데이터에 접근할 수 있도록 하며,

자신의 정보를 스스로 가지고 있도록 하는 방법에는 '참조'가 있습니다.

참조는 외부에서도 가질 수 있습니다.

그리고, 데이터는 자기 자신 것만 사용할 수 있습니다.

외부가 아무리 변하더라도, 독립적으로 사용가능한 방법이 바로 참조라는 것입니다.

괜히 동적 메모리 동적 메모리 하는 것이 아니었습니다...


쓰레드가 의존적이지 않게 코드를 구현하도록

신경쓰는 우리 모두가 됩시다.


이상 삽잡이였습니다.