3

这是在 Redhat EL5 机器上,带有 2.6.18-164.2.1.el5 x86_64 内核,使用 gcc 4.1.2 和 gdb 7.0。

当我使用 gdb 运行我的应用程序并在它运行时中断时,我的几个线程在我执行回溯时显示以下调用堆栈:

#0  0x000000000051d7da in pthread_cond_wait ()
#1  0x0000000100000000 in ?? ()
#2  0x0000000000c1c3b0 in ?? ()
#3  0x0000000000c1c448 in ?? ()
#4  0x00000000000007dd in ?? ()
#5  0x000000000051d630 in ?? ()
#6  0x00007fffffffdc90 in ?? ()
#7  0x000000003b1ae84b in ?? ()
#8  0x00007fffffffdd50 in ?? ()
#9  0x0000000000000000 in ?? ()

这是一个常见问题的症状吗?
在等待条件时查看调用堆栈是否存在已知问题?

4

3 回答 3

3

问题是它pthread_cond_wait是用手工编码的程序集编写的,并且在您的glibc. 此问题最近可能已在此处修复。

您可以尝试构建和安装最新的 glibc(注意:如果您搞砸了安装,您的机器可能会无法启动;请谨慎使用!),或者只是使用来自pthread_cond_wait.

于 2009-12-04T06:16:53.670 回答
1

通常,当多个线程共享一个资源时,需要同步。在这种情况下,当您中断程序时,您将看到只有 1 个线程正在运行(即访问资源),而其他线程正在等待pthread_cond_wait()

所以我不认为pthread_cond_wait()它本身是有问题的。

如果您的程序因死锁而挂起或性能无法扩展,则可能是由pthread_cond_wait().

于 2009-12-03T23:58:47.113 回答
0

对我来说,这看起来像是一个损坏的堆栈跟踪

例如:

#9  0x0000000000000000 in ?? ()

NULL 处不应有代码

于 2009-12-03T23:37:50.910 回答