3

これは、gcc 4.1.2 および gdb 7.0 を使用する 2.6.18-164.2.1.el5 x86_64 カーネルを搭載した Redhat EL5 マシン上にあります。

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が手作業でコーディングされたアセンブリで記述されており、明らかに .NET のビルドに適切なアンワインド記述子 (スタックをアンワインドするために x86_64 で必要) がないことですglibc。この問題は、最近ここで修正された可能性があります。

最新の glibc をビルドしてインストールすることもできます (注: インストールを失敗すると、マシンが起動できなくなる可能性があります。アプローチには細心の注意を払ってください) pthread_cond_wait

于 2009-12-04T06:16:53.670 に答える
1

通常、複数のスレッドが 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 に答える