単純なマルチスレッドのOpenGLアプリケーションを機能させようとしています。更新スレッドとレンダリングスレッドがあります。私が書いたように、それらはミューテックスロックされているので、本質的に交代で実行されているはずです。代わりに、更新スレッドは数十回実行され、次にレンダリングスレッドは数十回実行されます。関連するコードは次のとおりです。
void glRender() {
printf("glRender()\n");
glXMakeCurrent(display, window, glXContext);
glSetup();
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(cosf(fDrawAngle), sinf(fDrawAngle));
glVertex2f(cosf(fDrawAngle+2.1f), sinf(fDrawAngle+2.1f));
glVertex2f(cosf(fDrawAngle+4.2f), sinf(fDrawAngle+4.2f));
glEnd();
glXSwapBuffers(display, window);
glXMakeCurrent(display, 0, 0);
}
void * glThread(void * params) {
while (bRunning) {
pthread_mutex_lock(&mutex);
glRender();
pthread_mutex_unlock(&mutex);
}
pthread_exit(0);
}
// Multi threaded version
void gameUpdateMT() {
while (bRunning) {
pthread_mutex_lock(&mutex);
printf("gameUpdate()\n");
windowUpdate();
fDrawAngle += 0.01f;
pthread_mutex_unlock(&mutex);
}
}
// Single threaded version - Runs fine.
void gameUpdateST() {
while (bRunning) {
printf("gameUpdate()\n");
windowUpdate();
fDrawAngle += 0.01f;
glRender();
}
}
gameUpdateMT()とglThread()は並行して実行されています。他のスレッドが実行される前に、1つのスレッドが何度もループする原因は何でしょうか。