【问题标题】:glXMakeCurrent never returns in multiple multithreaded linux opengl applicationsglXMakeCurrent 永远不会在多个多线程 linux opengl 应用程序中返回
【发布时间】:2012-05-01 07:13:20
【问题描述】:

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

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

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

知道为什么glXMakeCurrent 可能不会返回,即使它拥有对其 X 显示器的独占访问权限?

【问题讨论】:

    标签: c++ linux opengl xlib juce


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-11-05
      • 1970-01-01
      • 2012-07-05
      • 2013-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多