問題タブ [livelock]
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.
java - スレッドのコンシューマーとプロデューサーを使用した循環バッファー: 一部の実行でスタックします。
コンシューマーとプロデューサーの 2 つのスレッドを持つ循環バッファーを開発しています。でアクティブ待機を使用していThread.yield
ます。セマフォでそれが可能であることは知っていますが、セマフォなしでバッファが欲しかったのです。
どちらにも共有変数があります: bufferCircular
.
バッファが有用な情報でいっぱいではない間、配列producer
の位置にデータを書き込み、p
有用な情報がいくつかある間、配列consumer
の位置にデータを読み取りますc
。変数nElem
fromBufferCircular
は、まだ読み取られていない値データの数です。
このプログラムは、9/10 回実行すると非常にうまく機能します。次に、画面に最後の要素 (ループの番号 500) を表示する前に無限ループでスタックするか、要素を表示しないことがあります。
おそらくliveLockだと思いますが、間違いが見つかりません。
共有変数:
プロデューサー スレッド:
消費者スレッド:
メイン:
どんな助けでも大歓迎です。
java - ライブロックを克服するために何をすべきか?(一般的に、以下に示すコード例に固有)
私はJavaが初めてで、ライブロックの概念を学ぼうとしています。
夫と妻がスープを食べようとしているが、スプーン1杯しか持っていないライブロックの素晴らしい例をオンラインで見つけました. 各配偶者は礼儀正しく、相手がまだ食べていない場合はスプーンを渡します。
私の質問は、ライブロック全般の問題を克服するために何をすべきかということです。この特定の例ではどうすればよいでしょうか? 問題の解決策を示すためにコードを変更しようとしています。
objective-c - Objective-C のブロックと do-while ループ
Objective-C でのブロックの操作に問題があります。私の問題は、関数 readDataFromCharactUUID の完了ブロックが do-while-loop を使用して呼び出されないことです。do-while-loop を使用しないと、一度呼び出されます。
私のコードでやりたいことは、値が 0x01 になるように頻繁に BLE 特性から値を読み取ることです。
私の質問: 完了ブロックが実行されないのはなぜですか? 私の場合、完了ブロックが実行されるようにするにはどうすればよいですか?
使用コード:
前もって感謝します!
multithreading - これは、ライブロック、デッドロック、飢餓の例ですか?
スケジューリング スキーム : プリエンプティブ プライオリティ スケジューリング
状況 :
プロセス L (低優先度) がリソース (R) のスピンロックを取得します。まだクリティカル セクションにある間に、別のプロセス H (より高い優先度) がレディ キューに到着したため、L は横取りされます。.
ただし、H もリソース R にアクセスする必要があるため、スピン ロックを取得しようとするため、H はビジー待機状態になります。スピンロックが使用されるため、H は実際に待機状態になることはなく、常に実行中状態または準備完了状態 (さらに優先度の高いプロセスが準備完了キューに到着した場合) になり、L または H よりも優先度の低いプロセスが実行されなくなります。
A) 優先度が H 未満のすべてのプロセスは、飢餓状態にあると見なすことができます。
B) 優先度が H 未満のすべてのプロセスとプロセス H は、デッドロック状態にあると見なすことができます。[しかし、システムがデッドロック状態にあると見なされるには、プロセスが待機状態にある必要はありませんか?]
C) プロセス H と同様に H より低い優先度を持つすべてのプロセスは、ライブロック状態にあると見なすことができます。システムがライブロック状態の場合、すべてのプロセスの状態を (スピンロックの一部として) 継続的に変更する必要はありませんか?]
D) H のみがライブロック状態にあると見なすことができます。優先度の低いプロセスはすべて、ライブロック状態ではなく、飢餓状態にあります。
E) H は進行しませんが、ライブロック状態とは見なされません。優先度の低いすべてのプロセスは、ライブロック状態ではなく、飢餓状態にあります。
上記の記述のうち、正しいものはどれですか? 説明できますか?