問題タブ [rcu]

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.

0 投票する
1 に答える
190 参照

concurrency - すべてのスレッドが潜在的なアップデーターである場合、rcu は何らかの形で役立ちますか?

私の質問は、実際には Linux の rcu リストの実装に固有のものです。読み取り後に表示される rcu バージョンは更新に適していない可能性があるため、リストから読み取って更新する (たとえば、そのエントリを削除する) クリティカル セクションのスピンロックを保持する必要があります。したがって、私の場合、ほとんどのスレッドが何らかの時点で更新を行っています。そのようなシナリオで rcu 実装を効率的に利用する (つまり、スピンロックが保持されるセクションを最小限にする) 方法があると思いますか?

0 投票する
1 に答える
782 参照

memory-management - 従来のガベージ コレクションに代わる RCU

Read-Copy-Update (RCU) は、Linux カーネルでますます普及している手動メモリ管理の手法です。

従来のガベージ コレクターの代わりに RCU を使用して到達不能なメモリを再利用する言語と VM を設計することは可能ですか?

0 投票する
0 に答える
908 参照

data-structures - smp_wmb() の関数は、コンパイラと CPU による命令の並べ替えを防ぐことができますか?

コードは次のとおりです。

smp_wmb() の関数は、コンパイラによるwikiからの命令の並べ替えを防ぐことができることを知っています。
しかし、CPU による並べ替えを防止する RCU の方法は何ですか?

0 投票する
1 に答える
214 参照

rcu - パブリッシュ-サブスクライブ メカニズムと RCU ロックの読み取り側クリティカル セクション

質問1:

RCU ロックを紹介する記事で、彼はパブリッシュ/サブスクライブ メカニズムを記述しています。しかし、rcu_assign_pointer()について質問があります。この記事で、彼は次のように述べています。

rcu_assign_pointer() は新しい構造体を公開し、コンパイラと CPU の両方に、p によって参照されるフィールドへの割り当ての後に gp への割り当てを強制的に実行させます。

しかし、コンパイラと CPU はpが割り当てられたことをどのように知ることができますか?たとえば、p->a と p->b を初期化した場合、コンパイラと CPU は 2 つの状況をどのように区別するのでしょうか?

質問2:

読み取り側のクリティカル セクションについては、連続してデータを読み取るリーダーがいる場合、ライターはそれらを待つ必要がありますか、それともライターは同期操作を実行できませんでしたか? はいの場合、読者は常に古いバージョンを読みますか?

0 投票する
1 に答える
257 参照

linux - rcuによる複数リスト保護

やあ、

Linuxカーネルのrcuロックメカニズムは初めてです。

rcu がどのように機能し、提供されている API を理解しようとしているときに、rcu_read_lock()、rcu_synchronize() がロック インスタンスを取得しないことがわかりました。では、RCU を使用して保護したい n 個の独立したリストがあるとしましょう。読み取りと synchronise() は正常に動作することが保証されていますか?

質問が素朴すぎると思われる場合はご容赦ください

前もって感謝します。

0 投票する
0 に答える
384 参照

c - Linuxカーネルの同時ハッシュマップからすべてのエントリを削除します

モジュール全体のハッシュマップを使用して接続を保存するカーネルモジュールを作成しています。モジュールがアンロードされたときに、これらすべての接続を解放し、ハッシュマップからそれらを削除してから、マップ全体を削除したいと考えています。

ハッシュマップを定義しました:

でエントリを追加

そして最後にすべてのエントリを削除したい:

私の質問:

  • for ループ hash_for_each_rcu で削除できますか?
  • これをスレッドセーフにするにはどうすればよいですか?
  • ハッシュマップに free_hash のようなものを呼び出す必要がありますか? (これは配列であり、kallocが呼び出されていないため、ここではないと思いますが、cはあまり得意ではありません)
  • おまけ: Linux カーネルの RCU に関する優れた/簡単なチュートリアルはありますか?

ありがとうございました