【发布时间】:2014-11-21 16:25:15
【问题描述】:
我们创建了一个在 Ubuntu 上运行的多线程、单核应用程序。
当我们从主进程调用getaddrinfo 和gethostbyname 时,它不会崩溃。
但是,当我们从主进程创建线程并从创建的线程调用函数 getaddrinfo 和 gethostbyname 时,它总是崩溃。
请帮助。 请在下面找到调用堆栈:
#0 0xf7e9f890 in ?? () from /lib/i386-linux-gnu/libc.so.6
#1 0xf7e9fa73 in __res_ninit () from /lib/i386-linux-gnu/libc.so.6
#2 0xf7ea0a68 in __res_maybe_init () from /lib/i386-linux-gnu/libc.so.6
#3 0xf7e663be in ?? () from /lib/i386-linux-gnu/libc.so.6
#4 0xf7e696bb in getaddrinfo () from /lib/i386-linux-gnu/libc.so.6
#5 0x080c4e35 in mn_task_entry (args=0xa6c4130 <ipc_os_input_params>) at /home/nextg/Alps_RT/mn/src/mn_main.c:699
#6 0xf7fa5d78 in start_thread () from /lib/i386-linux-gnu/libpthread.so.0
#7 0xf7e9001e in clone () from /lib/i386-linux-gnu/libc.so.6
【问题讨论】:
-
您没有显示任何代码。是时候学习如何使用 gdb了。
-
gethostbyname不需要是可重入的,因此如果从多个线程调用可能不是线程安全的。如果您使用glibc作为您的c 库,您可以尝试使用gethostbyname_r看看是否可以解决问题。
标签: c linux multithreading getaddrinfo gethostbyname