問題タブ [synchronisation]

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 に答える
1182 参照

c - C の三項演算子とシーケンス ポイント

私は以下に示す形式の式を持っています:-

三項演算子はCのシーケンスポイントですが、シーケンスポイントはテスト部分で終わると思います。

この理解は正しいですか?このステートメントは未定義の動作につながりますか?

0 投票する
3 に答える
134 参照

java - シングルスレッドでの静的メソッドへの多くの呼び出し

このクラス、静的メソッドの呼び出しと出力を見てください。

このプログラムを実行している出力が異なります(System.out.printから注文)。例:

なぜ私に(詳細を)説明してもらえますか?前もって感謝します。sznury

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

java - 変更ログとデータベース同期を備えたエンティティ

私は、java、jpa2、spring、hibernateデータベースアプリケーションに照らして、基本的にエンティティのSCMのようなことを実行できるソリューションを探しています。複数のアプリケーションサーバーでホストされているデータベース駆動型のJavaエンタープライズアプリケーションがあります。これらのアプリケーションサーバーは、すべて同じJavaコードに基づいており、同じデータベースを使用するステートレスWebアプリケーション(REST APIなど)をホストします。このアプリケーションが提供するサービスの1つは、ファイル管理です。ユーザーは(さまざまなAPIクライアントおよびフロントエンドアプリケーションを介して)、ファイルおよびフォルダーの作成(アップロード)、削除、名前変更、移動を行うことができます。

今しばらくの間、ファイルバージョンの要件が出てきており、私はこの問題に最終的に取り組みたいと思っています。これは私がJavaエンティティに関して思いついたものです:

私は、委任を通じて直接Fileではなく、公開する予定です。FileVersionこれを機能させるには、「ヘッド」バージョン(バージョンコレクションの最後のエントリ)を取得するための簡単な方法が必要です。基本的に、上のすべての書き込み操作は、その時点での「ヘッド」に基づいてFile新しいものを作成する必要があります。FileVersion複数のアプリケーションサーバーが同じデータベースにアクセスしていることを考えると、それぞれのFileエンティティをロックできる方法があるかどうかはわかりません(行レベルのロック?)。これにより、新しいファイルバージョンを正しい「頭」に基づいて作成できます。 "。

私が持っていたもう1つの考えは、クライアントに、変更の基になっているある種のバージョン識別子を提供させることでした。FileVersion永続化時にこのバージョン識別子が特定のバージョンの最新のものと一致しない場合File、アプリケーションは変更を拒否する必要があります...

私はこれで正しい方向に進んでいますか、それとも私のアプローチは失敗したと見なされますか?

0 投票する
5 に答える
366 参照

java - オブジェクトインスタンスのJavaロック...これは安全ですか?

私の質問は、Java でのオブジェクト インスタンスのロックに関するものです。複数のスレッドから同時に呼び出すことができる次のメソッドがあります。一度に 1 つのスレッドだけが 1 つのインスタンスにアクセスしている限り、同時処理を許可したいので、オブジェクト インスタンスをロックすることにしました。

私の単純化されたコードは、基本的にローカル変数をロックしているこのようなものになります。これは私が必要としているものを本当に満たしてくれるでしょうか?変更される可能性のあるオブジェクトを決してロックしないようにするための提案を読んでいましたが、結局これが私がやっていることなのかどうか突然確信が持てなくなりました!

ありがとう!

編集:

親愛なる...投稿のためにコードを単純化しようとする試みが少し誤解を招く可能性があることに気づきました。

以前「getInstance」と呼んでいたメソッドの名前を別のもの (「getFromMap」) に変更して、メソッド呼び出しがハッシュマップ内のオブジェクトへの参照を返すカスタム コードであることを示します。

前の答えはまだ有効ですか?混乱をお詫びします!

0 投票する
2 に答える
406 参照

multithreading - 2 つの EMF アダプターを使用した EMF モデルと GEF エディターの同期

GEF エディターと EMF ベースのモデルとの同期に問題があります。notifyChanged()これは、モデル内部の EMF アダプター、またはそれが呼び出すメソッドが、エディターのアダプターが呼び出されてモデルの子を更新する前に終了していないためだと思います。これにより、エディター ビューがモデル自体と同期しなくなるか、モデルへの変更がビューに表示されるべきときに表示されなくなります。

この設定を検討してください。" Command"CreateNodeCommandは、基になるモデルにノードを追加します。

GraphEditPartは、 を拡張する内部クラスがありorg.eclipse.emf.common.notify.Adapterます。notifyChanged()以下のようにテストされているように、そのメソッドは実際に通知されます(不完全なコード) :

問題は、(サードパーティの) モデル自体も を実装しAdapter、ID の追加など、新しいモデル要素で多数のメソッドを実行することです。

新しい要素の図が作成された直後にエディターに表示されないという事実は、次の編集ステップの後にのみ表示され、その図は表示されないという事実は、モデルアダプターがエディターアダプターrefreshChildren()によって既に呼び出されている間、まだ新しい要素を設定するのに忙しいです。

これは同期を必要とするようですが、これがマルチスレッド用の組み込みの Java 機能で達成できるのか、または EMF ベースのアプローチを必要とするのかはわかりません。

EMF での同期に関する知識を共有してください。

よろしくお願いします!

編集

getModelChildren()リクエストに応じて、メソッドのソース コードを以下に示します。

0 投票する
2 に答える
99 参照

c# - スレッドのループとバッファからのメッセージの待機-最善の解決策

私は特定の問題を抱えています。バッファが空でない場合、いくつかの期間で制御する1つの別個の作業スレッドが必要です。そうでない場合、スレッドはバッファ(ConcurrentQueue)からデータを送信します... CPUにとってそれほど高価ではない良い解決策はありますか?

これが私の方法です。うまくいきますが、あまりうまくいかないかもしれません(実際、スレッドの同期をあまり理解していません)。

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

graphics - 動的データの描画に関する Java グラフィックスの同期の問題

私は、常に更新されているデータを描画したいプログラムを持っています (ちなみに microhlone-line-data です)。データは長さ 8000 の double の配列です。paint メソッドのテイク間でオーバーライドされるデータの「損失」についてはあまり気にしません。

私の単純な実装では、描画ルーチンの進行中にオーディオデータが更新される同期の問題があることが明らかになりました。

また、Java と Java の Concurrency パッケージについて少し古くなっていることも承知していますが、私の最初の対応は、共有データ コードの周りに同期ブロックを配置することでした。当然のことながら、これによりグラフィック スレッドがブロックされることがあるので、これを行うにはもっと良い方法があると思います。

基本的に、私は同期の経験があまりなく、どこかで物事を少し台​​無しにしています。これらの問題をよりよく理解している人が、グラフィックス スレッドをブロックしない、より洗練されたソリューションを提案できるのではないでしょうか?

私の素朴なコード:

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

pthreads - pthread 同期に関するアドバイス/提案が必要 (条件変数とバリアの使用を組み合わせる)

次のシナリオがあります。

1 つのタスクをいくつかのステージに分割します。各ステージには実際の作業を行うためのスレッドがいくつかあります。後のステージのスレッドは、現在のステージのすべてのスレッドが完了するまで待機する必要があります。

例えば:

スレッド 1、2、3 はステップ 1 の作業を行っています。

スレッド 4、5、6 はステップ 2 の作業を行っています。

スレッド 7、8、9 はステップ 3 を実行しています ...

各ステップのスレッドは独立していますが、前のステップのスレッドが終了するまで待機する必要があります。

これを達成したい方法は次のとおりです。

  1. 現在のステップの各スレッドで、現在のステップを開始できるかどうかを表す条件で待機します
  2. 現在のステップを開始できるようになると、すべてのスレッドが作業を開始し、バリアでこのステップのすべてのスレッドが終了するのを待ちます
  3. このステップのすべてのスレッドが終了した後、次のステップのスレッドが待機している条件変数でブロードキャストします

それは理にかなっていますか?ここで何か明らかに間違っていますか?

マルチスレッド プログラムの高水準言語構造にうんざりしており、pthread API を使用するのは苦痛です。ここで、このユース ケースのベスト プラクティスについてアドバイスが必要ですか? どうもありがとう

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

multithreading - Delphi2006 - TMultiReadExclusiveWriteSynchronizer を備えた TList はありますか?

マルチスレッドの外部アプリケーションがあり、このアプリはカスタム dll を使用してそのスレッドからいくつかのことを行っています。
このdllには、データを読み書きする2つの関数がありますTList
それらのスレッドがそのリストを自由に読み取れるようにする必要がありますが、一度に書き込むことができるのは 1 つだけで、残りは書き込むまで待機する必要があります。

私の質問:
- BDS 2006 にTListは TMREWSync 機能を備えたコンポーネントがありますか、または -
私のアプリで使用できる無料のサードパーティ コンポーネントを知っているかもしれません。
TList

編集TThreadList.LockList:私はそのリストに書き込むためだけに何かが必要です。

助けてくれてありがとう。

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

stream - Directsound ストリームの同期

2 つの Directsound ストリームの同期について質問があります。

サウンドを録音および再生するために、現在 Portaudio を使用して 2 つの Directsound ストリームを開いています。入力バッファがいっぱいになり、出力バッファがデータを必要とするたびに呼び出される 2 つのコールバック関数があります。

ここに私の問題があります...

入力ストリームは 48kHz のサンプルレート (@1024 サンプル) で実行されています。出力ストリームは 192kHz のサンプルレート (@4096 サンプル) で実行されます。入力バッファーがいっぱいになり、コールバックが呼び出されるたびに、DSP を実行し、その後、結果を 192kHz に変換します。出力ストリームは結果を受け取り、データを出力します。現在、2 つのストリームは完全に同期していません。

Portaudio API 全体を調べましたが、2 つのストリームを一緒にロックする同期オプションが見つかりません。

2 つの Directsound ストリームをロックする方法はありますか? 48kHz の入力と 192kHz の出力が本当に必要です。

Br、

ヴィンセント・ブルーインク。