問題タブ [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.
pthreads - futexベースのミューテックスをglibc-2.2linuxthreadsミューテックスと混合できますか?
futexとlinuxthreads-0.9が何であるかわからない場合は、返信しないでください。
1つのプログラムfutexベースのミューテックスとlinuxthreads-0.8または-0.9(すべてのglibc <= 2.2およびすべてのuClibcで使用された)のミューテックスを混在させることはできますか?
プロセス間ミューテックス(pshared one、PTHREAD_PROCESS_SHARED)が必要です。
したがって、スレッドがlinuxthreads pthread_managerによって開始および管理される場合、futexベースのスリープとウェイクによって混乱しますか?
プロセス間同期とスレッド間同期の両方にfutexベースのミューテックスを使用できますか?
mutex - ミューテックスまたはフューテックスのレイテンシーを測定する
ミューテックス、セマフォ、またはフューテックスのレイテンシーを測定するにはどうすればよいですか?つまり、以前にロックされたミューテックスのロックを解除することと、そのミューテックスをロックすることの2つのイベント間のレイテンシーを意味します。2つのケースがあります。すべてのスレッド/プロセスが同じCPU上にある場合(スレッドの再スケジュールにかかる時間)と、最初のスレッドが最初のCPU上にあり、2番目が2番目の場合です。
あるいは
今回は非常に短い(〜1kサイクル)ので使えませんgettimeofday()
linux - futex() 呼び出しが多すぎます
外部 MQ キューに公開しようとしているときに、Linux RedHat マシン上の Java アプリの 1 つで異常な遅延が発生しています (これまでに発生したことはありません)。ボックスで簡単なヘルスチェックを行ったところ、CPU/メモリの使用量は問題ないようです。MQ ボックスも非常に優れています。Javaプロセスを再起動しましたが、うまくいきません! strace
その後、簡単なスナップショットを取得しましたが、futex()
通話でいっぱいです。
なぜ非常に多くのロックが発生するのかについて誰かが手がかりを与えることができるかどうか疑問に思っていました (私はそれが非常に広く開かれた種類の質問であることを知っています. アプリが実際に何をするかによって異なります).
しかし、私は問題についてもう少し洞察を得たいと思っていました。
linux - ユーザー空間でfutexを使用しますか?
ロック/ロック解除コンテキスト外のユーザー空間で do_futex() 呼び出しの機能が必要です。つまり、ミューテックスは必要ありませんが、カーネルの正確なセマンティクスは do_futex を呼び出します。
システムコールの数を最小限に抑えることが目的だったので、ユーザー空間で利用できるはずですが、リンクできません。
または、システムコールはありますか?
アップデート:
現在、syscall(__NR_futex, ...) を使用して do_futex() を実行しています。しかし
- 醜い__NR_futexを取得するためにインクルードする必要があります
- FUTEX_WAIT と FUTEX_WAKE を取得するために含める必要がありますが、それでも EWOULDBLOCK、または WAKE の最大スレッド数を取得できません。
コヒーレントラッパーはありますか?
linux - do_futexを使用して混乱しましたか?
奇妙なエラーが発生します。次の2つの関数を実装しました。
そして、2つのPosixスレッドを実行してそれらをテストします。
thread2が100万回ほど繰り返された後、私はassertfireを受け取ります。
./a.out 0 == res &&(0!=(* flag))1 261129 1094433
これは、syscall(したがってdo_futex())が0を返したことを意味します。男性は、do_futex(WAKE)呼び出しによってウェイクアップされた場合にのみそうする必要があると言います。しかし、WAKE呼び出しを行う前に、フラグを0に設定しました。ここでは、フラグはまだ1であるように見えます。
これはIntelです。これは強力なメモリモデルを意味します。したがって、thread1でthread2のシステムコールの結果が表示された場合、呼び出し前のスレッド2での書き込みの結果も表示する必要があります。
フラグとそれへのすべてのポインターは揮発性であるため、gccが正しい値の読み取りに失敗する可能性があるかどうかはわかりません。
私は困惑しています。
ありがとう!
linux - Futex ベースのロック機構
futex に基づいたロック機構の使用例を教えてください。(マルチコア x86 CPU、CentOS 用)
python - Python が futex 呼び出しでハングする
本番環境で Python デーモンを実行しています。7 ~ 120 のスレッドを使用します。最近、最小のインスタンス (7 スレッド) がハングを示し始めましたが、他のすべてのインスタンスはこの種の問題を示しませんでした。strace を Python プロセスにアタッチすると、すべてのスレッドが futex FUTEX_WAIT_PRIVATE を呼び出していることがわかります。そのため、おそらく何かをロックしようとしています。
このような問題をどのようにデバッグしますか?
これはフラッシュ メモリから実行される実稼働システムであるため、ディスクへの書き込みも制限されることに注意してください。
locking - futex ベースの 4 バイトの単一ライター/複数リーダー ロック
シングル ライター/マルチ リーダー ロックの最小限のfutexベースの実装を探しており、単一の 4 バイト futex 状態変数を超えるスペース オーバーヘッドを必要としません。
背景: 何千万から何億もの小さなオブジェクトのそれぞれにロックを埋め込むアプリケーションがあります。ロックの非常にきめ細かな性質とアプリケーションの構造により、競合は最小限に抑えられると予想しています。さらに、作家はまれであり、競合する作家はさらにまれです。これらすべての理由から、この特定の設定では、(理論的には)「雷鳴が聞こえる」現象が発生しやすい解決策はまったく受け入れられます。
gcc - 小さな OpenMP プログラムが時々フリーズする (gcc、c、linux)
小さな omp テストを書くだけでは、常に正しく動作するとは限りません。
j
この例では、すべてのスレッドからの書き込みに対するの使用は正しくありませんが、
j の非決定論的な値のみが存在する必要があります
フリーズしています。
でコンパイルgcc-4.3.1 -fopenmp a.c -o gcc -static
4 コアの x86_Core2 Linux サーバーで実行:$ ./gcc
フリーズしました (4 ~ 5 回の高速実行で 1 回フリーズするなど)。
トレース:
フリーズ (デッドロック) が発生するのはなぜですか?
linux - CLONE_THREAD を使用して生成され、カーネル空間の共有リソースでブロックされたスレッドを強制終了する方法は?
clone() で CLONE_THREAD オプションを使用して生成されたスレッドがあるテスト ケースがあります。しかし、スレッドがカーネル空間で待機している場合 (futex_wait など)、kill は実際にスレッドに影響しますか?
上記の方法で作成されたスレッドを強制終了しようとしましたが、SIGKILL が同じプロセスに送信されると、プロセス全体が強制終了されます。