問題タブ [mutual-exclusion]
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.
android - バックグラウンドスレッドからリアルタイムでデッドロックなしでアクティビティにデータを渡すための優れたAndroidグローバルオブジェクトを実装するにはどうすればよいですか?
@Jusit は、グローバル オブジェクトを使用してバックグラウンド スレッドからアクティビティにデータを渡すことを提案しましたが、それは機能しました。しかし今、私はデッドロックについて心配しており、それを回避/防止する良い方法があるかどうか. また、グローバル オブジェクトとしての String の選択が適切かどうかもわかりません。これが私が現在行っていることの説明です。
実際には、グローバル オブジェクトは、以下に示すように、Blueterm.java で作成された public static 変数にすぎません。
したがって、strData は、次のようにバックグラウンド スレッドによって作成および書き込まれるグローバル オブジェクトであると思います。
私の意図は、プロット アクティビティが読み取り中に strData が上書きされるのを防止するために strRead を使用することです。strWrite は、次のように書き込まれている間、プロット アクティビティが strData を読み取らないようにします。
プロット アクティビティがそれを読み取った後、strData が空の文字列にリセットされることがわかります。
携帯電話が USB でデバッグに接続されていないときに強制終了が発生したため、強制終了の原因がわかりません。それ以来、それは起こっていません。
ここでデッドロックなしで同時実行を達成するための提案はありますか? 相互排除 (セマフォ、ロック、ミューテックス) について読んだことがありますが、どれを使用すればよいかわかりません。また、リアルタイムのデータ転送が必要なため、グローバル オブジェクトとして String を選択したのはおそらく悪いことです。つまり、アクティビティが読み取りを完了するのを待ってスレッドをブロックしたくありません。また、バックグラウンド スレッドが書き込みを完了するのを待ってアクティビティをブロックしたくありません。String を取り除き、代わりに FIFO バッファを実装/使用する必要がありますか?
wpf - `SelectedIndex` が 0 より大きい場合にトリガー
が 0 より大きい場合 (基本的に、オプションが選択されてComboBox
いる場合)にトリガーを設定するにはどうすればよいですか? 私が持っているのは 2 つのes ですが、ユーザーはそのうちの 1 つしか選択できません。したがって、A から最初のオプションを選択すると、B は0 を取得する必要があり、その逆も同様です。SelectedIndex
ComboBox
ComboBox
ComboBox
ComboBox
SelectedIndex
以下をいじってみましたが、必要なロジックをキャプチャする方法がわかりません。
どのような種類のトリガーを確認する必要がありますか?
c++ - 共有メモリのピーターソンのロックの問題
共有メモリに相互排除のためのピーターソンのアルゴリズムを実装しました。通信のために、c++ と Java プロセス (jni を使用) の間で共有メモリを使用しています。問題は、何らかの形でまだ競合状態が発生していることです。printf/println を使用してデバッグしようとすると、コードは正常に動作し始めますが、それらのプリントを削除するとすぐにプロセスが停止します。誰かがどこに問題があるのか教えてもらえますか? ピーターソンのアルゴリズムの実装が正しいと確信しています。相互排除のために代わりにセマフォ(semget())を使用する必要がありますか?
concurrency - オブジェクトのグループへの同時アクセス
ワークスティーリングアルゴリズムを使用してタスクを同時に実行し、スレッドのプールで構成されるアプリケーションを開発しようとしています。
これらのタスク
- 事前定義されたオブジェクトのセットにアクセスします。
- 実際に実行する前に、アクセスするすべてのオブジェクトに対する読み取り/書き込み権限を「アトミックに」取得する必要があります。
- 終了したら(そして最終的には終了することが保証されます)、取得したオブジェクトを解放します。
この問題を解決する1つの可能な方法は、各スレッドに一度にタスクを取得させてから、事前定義された順序を使用して各オブジェクトをロックしようとすることです。少なくとも1つが失敗した場合は、すべてのロックを解放し、別のタスクに進みます。
ただし、この方法では、オブジェクトの依存関係が大きいタスクが不足する可能性が高くなり、ライブロックが発生する可能性もあります。
同時実行性を最大化しながら一連のロックを取得する別の方法はありますか?(グローバルロックなし)または、システムを不要になるように変更しますか?もしそうなら、それについての良い論文はありますか?
ps:ティトンが答えたように、これは「食事する哲学者」問題の一般化されたバージョンです。非集中型のソリューション、特に高負荷(タスクの追加と削除)でうまく機能するアルゴリズムを探しています。
coldfusion - CFLOCK の CFRETURN はロックを適切に解放しますか?
CFLOCK タグを使用していくつかのコードを書いていますが、コードが CFLOCK 内のどこかで返されるところまで来ています。例:
CFRETURN が発火した場合、ロックは解除されますか、それとも別の方法でコードを操作する必要がありますか?
locking - pthread_rwlock_wrlock を再帰的にする
pthread 関数pthread_rwlock_wrlockの動作に関して問題があります。上記のリンクの仕様では、1 つのスレッドが書き込み用にロックをロックし、同じスレッドが再びロックすると、未定義の動作が発生することが示されています (x86 Linux ではこの関数を呼び出すことはヌープであり、PowerPC Linux ではスレッドを停止します)。
私が必要とする動作は、次の特性を持つ読み取り書き込みロックです。
- スレッドによる読み取りロックは、次の場合に成功します。
- ロックはどのスレッドにも保持されていません
- ロックは、0 個以上のスレッド (呼び出しスレッドを含む) によってのみ読み取りロックされ、呼び出しスレッドによって読み取りまたは書き込みロックされる可能性があります。
- 書き込みロックは、次の場合に成功します。
- ロックは他のスレッドによって保持されていません
- 現在のスレッドのみがロックを保持しています (読み取りまたは書き込み用)。
ではpthread_mutex_t
、ロックの再帰性は初期化フラグを介して制御できますが、これは では不可能ですpthread_rwlock_t
。
私のオプションは何ですか?この種の同時実行プリミティブを実際に C で実装する必要があったことはありません。また、明らかな解決策が欠けていると思います。
semaphore - 非アトミック待機による相互排除違反 - セマフォ
私は「オペレーティングシステム」のトピックをやっていますが、これについて頭を悩ませることはできません:
待機がアトミックに処理されない場合、相互排除がどのように違反されるかを示すように求められました。(セマフォ実装)
ここで、これがどのように誤ったカウントを引き起こし、プログラムが実際よりも多くのリソースを利用できると考えるかがわかります。
しかし、これが相互排除にどのように違反するかという概念を理解できないようです:(
誰かが光を当てたり、正しい方向に向けたりできますか?
c++ - std :: tr1 :: shared_ptrは相互排除を行いますか?
BYTE*
、参照カウンター、およびCRITICAL_SECTION
両方を同時アクセスから保護するを含むクラスがあります。
すべてを。に置き換えたいstd::tr1::shared_ptr<BYTE>
です。MSDNによると:
オブジェクトが所有権を共有するコピーである場合でも、複数のスレッドが異なるshared_ptrオブジェクトを同時に読み取りおよび書き込みできます。
CRITICAL_SECTION
クラスのfromがクラスの外部で使用されて「ロック」され、相互に排他的な方法でコンテンツが変更されていることがわかるまで、すべて問題ないように聞こえます。さて、それはカプセル化を破ります、私はそれを変えたいです。
メモリが解放されることをshared_ptr
保証しますが、メモリに書き込むときに相互排除を保証しますか?
c# - C# Web サービスの相互排除
elI には 2 種類のノードがあります。1 つはコーディネーターで、もう 1 つはワーカー ノードです。
それらは SOAP を介して通信します。
すべてのワーカー ノードは、相互に排他的なデータベース レコードの要求をコーディネーターに送信します。
コーディネーターに安全なレコードの ID を各ワーカーに返してもらいたいので、ワーカーが同じレコードを処理することはありません。
ミューテックスを使用して C# のスレッドで同様のことを行う方法は知っていますが、同期 Web サービス呼び出しのベスト プラクティスを知りたいと思っていました。
編集:私が抱えている問題はここにあります
sql - SQL LIKE 式に基づいて行を複数回合計しない
ID、tDate、説明、キャッシュアウト、キャッシュインの列を持つ銀行取引のテーブルがあります。特に Amazon と Mazo というショップで、自分がどのようにお金を使っているかを知りたいので、次のような結果が必要です。
私はこれを試みました:
ただし、次のことがわかりました。
この SQL クエリの問題は、「Amazon」トランザクションも加算されるため、「mazo」トランザクションの合計が間違っていることです。
各トランザクションが上記の SUM の 1 つだけの一部になるように (PHP などに頼ることなく)、合計するトランザクションの選択を相互に排他的またはそのようなものにしたい。(私のテーブルにはこれよりもはるかに多くのデータが含まれており、多くの検索基準があるため、検索語として「% mazo %」を使用するだけでは十分ではありません。問題の一般的な解決策が必要です。)
誰か提案がありますか?
テーブルとそのデータの詳細: