2010-11-17 30 views
2

我們正在編寫一個iPad應用程序,其中有相當多的後臺處理,所有這些都是用一組C++庫編寫的。這些庫在Linux,Mac和Windows上運行良好,但在iPad上它們只能用於調試版本。Boost.Thread線程在發佈版本中不在iPhone/iPad上啓動

在發佈版本中,它看起來像是第一個子線程正在啓​​動時,它可能永遠不會啓動,或者它的處理過程不夠遠,不能讓主線程繼續運行(它不是由於在發佈版本中使用斷點的正常問題,調試器非常明顯地知道線程是否真的開始啓動)。

在調試器中查看主線程位於boost::thread::start_thread(實際上在boost::detail::yieldboost::detail::spin_lock::lock內)。

CPU沒有達到100%,所以看起來旋轉鎖不會阻止新線程的創建。

我們嘗試了Boost 1.42和Boost 1.44,它們的行爲方式都是一樣的。 iOS 3.2和4.2都會因發佈版本而失敗。

我們可能做錯了什麼,或者這是一個已知的非工作配置?

回答

6

我們現在已經解決了這個問題。問題在於構建選項,並且線索是失敗的自旋鎖。

事實證明,在非拇指構建中使用了自旋鎖的ARM實現。由於拇指構建完成的方式,很容易混合拇指和非拇指構建(即,不用拇指構建Boost,並用拇指構建xCode)。這就是我們正在做的事情,這意味着旋轉鎖永遠不會得到信號,並會永遠阻止。

因此,要解決這個問題,請確保您爲所有庫使用相同的拇指構建選項!

此線程討論問題:http://groups.google.com/group/boost-list/browse_thread/thread/7dc1e80659182ab3

相關問題