問題タブ [spinlock]
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.
linux - Linux 用のハイブリッド ミューテックス ライブラリ
ハイブリッド ミューテックス機能を実装する Linux 用の標準スレッド ライブラリはありますか? つまり、最初は「スピンロックのように動作する」ミューテックスであり、「一定時間 (または再試行またはその他の測定要素) が経過してもロックが取得されない場合にのみ、スレッドは実際にスリープ状態になります。 "、メッキーがいつミューテックスの代わりにスピンロックを使用する必要があるかで言及したように?
linux - ARM および Linux の spin_lock_irqsave に関する懸念
これはスタック交換での最初のクエリですので、ご容赦ください。私の頭に浮かぶほとんどすべての質問は、フォーラムからすでに解決されていますが、これを見つけることができません.
Linux で単純なデバイス ドライバーを作成しました。ここで、my_init() 関数に次のコードを記述しました。
したがって、スピンロックを解放せずに単純に戻ります。理論と Linux ソース コードによると、割り込みは ARM で無効になっています。そのため、「I」ビットを使用してデバッガを使用している ARM の CPSR レジスタがマスクされ、IRQ が無効になっているのを見ました。しかし、驚いたことに、Linux プロンプトと schedule() 関数でさえ、通常どおりに機能しています。
私の質問は Linux で、一部の周辺機器にのみ IRQ モードを使用しますか? この場合、スレッド コンテキストと割り込みコンテキストの間の完全な同期をどのように保証できますか?
私のターゲットについて少し詳しく説明します:TI81xx Soc、Linux 3.2、Lauterbach Debugger。
ありがとう
linux-kernel - このコードがデッドロックになるのはなぜですか?
ローダブル モジュールに 2 つの Linux カーネル スレッドを作成し、それらをデュアル コア Android デバイスで実行される個別の CPU コアにバインドします。これを数回実行した後、HW ウォッチドッグ タイマーがリセットされてデバイスが再起動することに気付きました。私は一貫して問題にぶつかりました。デッドロックの原因は何ですか?
基本的に、私がする必要があるのは、両方のスレッドが do_something() を別のコアで同時に実行することであり、誰も CPU サイクルを盗むことはありません (つまり、割り込みが無効になっています)。これにはスピンロックと揮発性変数を使用しています。親スレッドが子スレッドを待機するためのセマフォもあります。
kernel - カーネルコードがスピンロックを保持した後、Linux がカーネルプリエンプションを無効にするのはなぜですか?
私は Linux を初めて使用し、Rubini & Corbet による Linux デバイス ドライバーの本を読んでいます。に関連する 1 つのステートメントで混乱していspinlocks
ます。本の状態
非プリエンプティブ ユニプロセッサ システムがロックでスピンに入った場合、永久にスピンします。他のスレッドが CPU を取得してロックを解放することはできません。このため、プリエンプションが有効になっていないユニプロセッサ システムでのスピンロック操作は、IRQ マスキング ステータスを変更するものを除いて、何もしないように最適化されています。
さらに本の状態
カーネル プリエンプションのケースは、スピンロック コード自体によって処理されます。カーネル コードがスピンロックを保持している場合は常に、関連するプロセッサでプリエンプションが無効になります。単一プロセッサ システムでも、競合状態を回避するために、この方法でプリエンプションを無効にする必要があります。
質問 : ユニプロセッサ システムで、カーネル コード (ユーザー プロセスに代わって実行) がスピンロックを保持するたびにカーネル プリエンプションが無効になっている場合、別のプロセスが実行する機会を得て、スピンロックを取得しようとする可能性はありますか? カーネル コードがスピンロックを保持するたびに Linux カーネルがカーネル プリエンプションを無効にするのはなぜですか?
linux - Linux カーネルでは、kfree の呼び出しはスリープ状態になりますか?
タイトルはほとんど問題です...
リスト管理に役立つスピンロックを使用するコードを書いています。スピンロックに関するドキュメントは、スリープするものを呼び出さないことについて非常に明確です。「アトミック」なメモリを割り当てる方法があることは知っていますが、kfree やメモリの解放については何も見ていません。
直感的には眠ってはいけないと言われていますが、それが明示的であることはわかりませんでした。
c# - スピンロック付きカスタムロック
エラーが表示されません。誰かがここで私を助けてくれるかもしれません。
スピンロックを使用したカスタム ロックがあります (学校用です)。
私が得る例外は次のとおりです。
System.ArgumentException が処理されませんでした
Message=このメソッドを呼び出す前に、takeLock 引数を false に設定する必要があります。
linux-kernel - カーネル モジュールの警告: 'struct rwlock_t *' が必要ですが、引数の型は 'struct rwlock_t *' です
以下のようにリーダー/ライター スピンロックを使用すると、奇妙なコンパイラ警告が表示されます。
acで定義
宣言してbcで使用する
したがって、bcでは、ロックまたはロック解除を呼び出すたびに、たとえば. read_rwlock(&rwspinlock)
以下の警告が表示されます。
次に、 acで定義された以下のように変更しまし た
ああで宣言
としてbcに含まれ、
これで、コンパイルの警告はなくなりました。しかし、私はどのように不明です!. 正確に何が起こったのか、誰か説明できますか?