2012-05-01 75 views
0

我在一臺機器上運行3個基於JUCE的多線程OpenGL應用程序 - 每個實例都連接到一個單獨的X顯示器。主應用程序線程調用XInitThreads,然後XOpenDisplay以適當的顯示。一個不同的線程然後用於​​主渲染循環。應用程序的3個實例將相互初始化,以便在下一個啓動時完成圖形設置。glXMakeCurrent永遠不會返回多個多線程的linux opengl應用程序

在80%的情況下,一切都開始正常,但有時在第二次和/或第三次申請中第四次致電glXMakeCurrent(這也是第一次由不同於其上的線程連接初始化)永不返回。 X線程已經初始化,線程正在使用鎖,並且在呼叫glXMakeCurrent之前X顯示器通過XLockDisplay鎖定(並在呼叫返回後解鎖)。

我確保每個應用程序都使用正確的顯示&上下文。如果它純粹與多線程訪問相同顯示連接的問題有關,那麼第一個實例遇到此問題的可能性應該相同 - 但它從來不會這樣做。

任何想法爲什麼glXMakeCurrent可能不會返回,即使它可以獨佔訪問其X顯示器?

回答

0

事實上,我錯了,這個問題似乎是由於JUCE OpenGL上下文缺少鎖定引起的。因此,X顯示鎖定被正確獲取,但是它應該映射到的上下文是(在問題情況下)被另一個線程同時訪問,導致glXMakeCurrent死鎖。

相關問題