posted by REDFORCE 2017. 3. 13. 23:22

본 글에서는 EngineCore에 대해 다뤄보도록 하겠습니다.


EngineCore는 엔진의 핵심 구동 부분을 명시합니다.



현재 개발중인 Engine의 로직은 다음과 같습니다.



WinMain에서 EngineSystem의 SystemStart( ) 함수를 호출 하면 

EngineSystem의 필요한 항목들을 초기화시키고 EngineCore를 Start 합니다.


EngineCore( ) 가 시작되면 가상함수로 넣어 뒀던 Update ( )와 Render ( ) 구역을 멀티 쓰레드로 수행하게 됩니다.


문제는 매 프레임 Update ( )와 Render ( ) 함수가 수행 되어야 하는데, 두 펑션이 멀티쓰레드로 구현 될 경우 루프를 돌면서 두 펑션이 각기 다른 타이밍에 돌 수 있다는 가정이 바로 나올 수 밖에 없습니다.


Update Thread는 45 Frame 째를 update ( ) 중이지만


Render Thread 는 아직 40 Frame 째를 Render ( ) 할 수도 있다는 것이지요.


따라서 두 쓰레드는 매 프레임 같은 간격으로 호출 될 수 있도록 동기화가 되어야 합니다.



Update Thread와 Render Thread 는 EngineCore에서 구현이 되어 있으며


이 글에서는 이 두 쓰레드에 대한 동기화에 대해서 먼저 보도록 하겠습니다.


공부하면서 만들다 보니 쓰레드를 백날 여러개만들어서 돌려봤자 동기화와 제대로 된 실행 시점이 정의 되지 않으면 똥망 한다는 것을 직접 체험해버렸습니다.


그래서 코어의 구조 자체를 한번 엎고 돌아오겠습니다.