0

我在一台机器上运行 3 个基于 JUCE 的多线程 OpenGL 应用程序实例 - 每个实例都连接到单独的 X 显示器。主应用程序线程调用XInitThreads后跟XOpenDisplay相应的显示。然后将不同的线程用于主渲染循环。应用程序的 3 个实例依次初始化,以便在下一个启动时完成图形设置。

在 80% 的情况下,一切都可以正常启动,但有时在应用程序的第二个和/或第三个实例中,第 4 次调用glXMakeCurrent(这也是第一个由与初始化连接的线程不同的线程进行的调用)永远不会回来。X 线程已初始化,线程正在使用锁,并且在调用glXMakeCurrentX 显示器之前通过锁定XLockDisplay(并在调用返回后解锁)。

我确保每个应用程序都使用正确的显示和上下文。如果它纯粹与访问同一显示连接的多个线程的问题有关,那么第一个实例遇到此问题的可能性应该相同 - 但它从来没有遇到过。

任何想法为什么glXMakeCurrent不能返回,即使它拥有对其 X 显示器的独占访问权限?

4

1 回答 1

0

事实上,我错了,这个问题似乎是由 JUCE OpenGL 上下文中缺少锁引起的。因此,正确获取了 X 显示锁,但它应该映射到的上下文(在问题情况下)被另一个线程同时访问,从而导致glXMakeCurrent死锁。

于 2012-05-03T08:31:24.087 回答