問題タブ [futex]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - glibc futex がハングアップする理由
APUEで紹介されているerr_doit関数を使ってプログラムを書いてみました。このプログラムは、無限ループでこの関数を使用して大量のメッセージを出力します。しかし、数分後に実行すると、常にハングアップします。このプロセスに添付されたstraceコマンドを使用してデバッグします。メッセージの下に出力されます。
ここにバグを発生させるソースコードがあります。助けてください、どうもありがとう。私のプログラムにはスレッドが1つしかありません。
c - 私のコードで Futex はどのように機能していますか?
futex コードからの出力がごちゃごちゃしています。
ここに私のコードがあります、
出力:
ここでの問題は、スレッド 2 が futex を解放する前に、別のスレッドがそれを取得していることです (出力に表示されている場合)。
では、なぜこのようなことが起こるのでしょうか?スレッド 2 が futex を使用している場合、スレッド 4 にはどのように与えられていますか? コードに欠陥はありますか?
linux - 32 ビット アプリと 64 ビット アプリを同時にサポートするミューテックスを実装する
ご存知のように、Linux の libpthread では、32 ビット モードと 64 ビット モードでミューテックスのサイズが異なります。同じ Linux ボックスで実行されている 32 ビット アプリと 64 ビット アプリの間で、共有メモリ内のミューテックスを共有することはできません。(これについて間違っていたら、訂正してください。)
32 ビットと 64 ビットのアプリを同時にサポートするために、Linux で futex を使用して独自のミューテックス ライブラリを実装しようとしています。つまり、このミューテックスは、ライブラリが 32 ビットまたは 64 ビットにコンパイルされているかどうかに関係なく、同じサイズと構造を持ちます。
さらに、「堅牢なミューテックス」もサポートしたかったのですが、ここに問題があると考えています。私の知る限り、glibc/libpthread は各 pthread の「robust_list」を作成し、すべての pthread ミューテックスのrobust_list を維持します。これは、カーネルの堅牢なリスト関数と連携して、アプリの堅牢なミューテックスをサポートします。
私の質問は、自分のミューテックスを glibc/libpthread によって管理されている同じ「robust_list」にアタッチすることは可能ですか? そうでない場合、別の堅牢なリストを使用して、新しいリストをカーネルに渡す必要がありますか? 自分のリストを転がすと、アプリはもう -pthread を使用できなくなるのではないかと思います。つまり、自分のミューテックス コードは、アプリの glibc pthread と共存できません。
コメントやアドバイスをいただければ幸いです。
ありがとう。
linux - このユーザー スペース アプリケーションのクラッシュをデバッグするにはどうすればよいですか?
組み込み Linux システム (TI AM335x ベース) で Qt5.4.0 アプリケーションを実行していますが、実行が停止し、デバッグに苦労しています。これは QtWebKit QML の例 (youtubeview) ですが、他の QtWebKit の例も同じように実行しているため、私のシステムに基づいた WebKit です。
アプリケーションを実行すると、1 秒ほど実行された後、メッセージが表示されずに終了します。syslog または dmesg にも何も報告されません。strace で開始すると、次の futex メッセージが表示されます。
その後、停止します。あまり役に立ちません...次はGDBでこれをデバッグすることでしたが、これを実行しようとするとGDBがクラッシュします:
-sh-4.2# gdb youtubeview
GNU gdb (GDB) 7.5
Copyright (C) 2012 Free Software Foundation, Inc.
...
(gdb) run
プログラムの起動: /usr/share/qt5/examples/webkitqml/youtubeview/youtubeview
/home /mike/ulf_qt_450/ulf/build-ulf/out/work/armv7ahf-vfp-neon-linux-gnueabihf/gdb/7.5-r0.0/gdb-7.5/gdb/utils.c:1081: 内部エラー: 仮想メモリを使い果たしました: 64652911 バイトを割り当てることができません。
GDB 内部の問題が検出されました。
この問題は、最初に main にブレーク ポイントを設定した場合でも発生し、実行を開始するとすぐにスタックしてメモリ不足になります。
- ここで問題を切り分けるのに役立つ他のツールや手法はありますか?
- おそらく、メモリの使用を制限したり、この Qt プログラムがクラッシュした理由についてさらに情報を提供したりするための GDB への引数はありますか?
- おそらく、FUTEX が保持されて失敗している理由を理解するために使用できるいくつかの FD またはシステム変数はありますか?
今、この問題をどこに持っていくべきかわかりません。
Qt コード自体は非常にシンプルで、ここで問題が発生することはないと思います。