簡體   English   中英

啟動時增強線程取芯

[英]Boost threads coring on startup

我有一個程序,該程序在整個生命周期中都會啟動和關閉多個線程。 一切都運行了一段時間,但最終,我得到了以下核心轉儲堆棧跟蹤。

#0  0x009887a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2
#1  0x007617a5 in raise () from /lib/tls/libc.so.6
#2  0x00763209 in abort () from /lib/tls/libc.so.6
#3  0x003ec1bb in __gnu_cxx::__verbose_terminate_handler () from /usr/lib/libstdc++.so.6
#4  0x003e9ed1 in __cxa_call_unexpected () from /usr/lib/libstdc++.so.6
#5  0x003e9f06 in std::terminate () from /usr/lib/libstdc++.so.6
#6  0x003ea04f in __cxa_throw () from /usr/lib/libstdc++.so.6
#7  0x00d5562b in boost::thread::start_thread () from /h/Program/bin/../lib/libboost_thread-gcc34-mt-1_39.so.1.39.0

起初,我在泄漏線程,並認為核心是由於達到當前線程數的最大限制而引起的,但是現在看來,即使我沒有,也會出現此問題。 作為參考,在上面的核心中有13個活動線程正在執行。

我做了一些搜索,試圖弄清為什么start_thread會成為核心,但是我什么也沒遇到。 有人有想法么?

start_thread引發未捕獲的異常,請查看哪些異常可以start_thread並對其進行catch以查看問題所在。

thread_resource_error攜帶哪些值? 看起來您可以調用native_error()進行查找。

由於這是pthread的包裝,因此只有幾種可能性-EAGAIN,EINVAL和EPERM。 看起來boost可能會為EINVAL和EPERM拋出異常,即unsupported_thread_option()和thread_permission_error()。

這幾乎留給了EAGAIN,所以我要再次檢查您是否確實沒有超出線程數的系統限制。 您確定要加入他們,或者如果脫離他們,他們真的走了嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM