gpt4 book ai didi

c++ - glXMakeCurrent 在多个多线程 Linux opengl 应用程序中永远不会返回

转载 作者:太空宇宙 更新时间:2023-11-04 04:24:17 25 4
gpt4 key购买 nike

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

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

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

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

最佳答案

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

关于c++ - glXMakeCurrent 在多个多线程 Linux opengl 应用程序中永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10394679/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com