問題タブ [thread-synchronization]

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 投票する
6 に答える
265 参照

java - Javaで同期されていないメソッドにアクセスするスレッド

Javaでスレッドと同期がどのように機能するかを説明してもらえますか?

高性能なアプリケーションを書きたいです。このアプリケーション内で、ファイルからいくつかのネストされたクラスにデータを読み取ります。これらは基本的にHashMapの基本です。

データの読み取りが終了した後、データを調べてさまざまなチェックを実行する必要があるスレッドを開始します。ただし、スレッドがデータを変更することはありません。

スレッドがデータを変更しないことを保証できる(または少なくとも保証しようとする)場合、データを含むオブジェクトの非同期メソッドを呼び出すためにそれらを使用できますか?

複数のスレッドが、クラスフィールドを変更しないが、いくつかの内部変数を持つ非同期メソッドにアクセスする場合、それは安全ですか?

人工的な例:

スレッドから非同期メソッドreturnBigSpikes()を呼び出しても安全ですか?

このようなユースケースは、制御が難しく、データ(たとえば、返されたbigSpikes)が変更されないため、潜在的に非常に危険であることがわかりました。しかし、私はすでにこのように実装してテストしており、アプリケーションの結果を今すぐ使用して、後でアーキテクチャを変更できるかどうかを知りたいです...

メソッドを同期させるとどうなりますか?アプリケーションのCPUパフォーマンスが1に低下しますか?もしそうなら、どうすればそれを正しく設計し、パフォーマンスを維持できますか?

(メインメモリに約20〜40 Gbのデータ(ログメッセージ)を読み込んでからスレッドを実行します。スレッドはすべてのデータを調べて相関関係を見つける必要があります。各スレッドは分析するメッセージの一部にすぎません。分析のために、スレッドはその部分からの各メッセージをデータからの他の多くのメッセージと比較する必要があります。そのため、スレッドが同期せずにデータを読み取ることを最初に許可することにしました)。

事前にどうもありがとうございました。

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

c# - キャッシュ、リソースの更新時にのみスレッドを同期

SO やその他のサイトでキャッシュとスレッドの同期についてかなり読んだことがありますが、まだ質問に対する答えが得られません。

静的ディクショナリ キャッシュの .NET スレッド セーフ

ロックは正確にどのように機能しますか?

ロックが別々のオブジェクトに対して実行されるのはなぜですか?

http://msdn.microsoft.com/en-us/magazine/cc188793.aspx

...

外部からのみ読み取られるリソースを公開するキャッシュを実装しようとしています。これらのリソースは更新できますが、頻繁に更新されるわけではなく、それほど時間もかかりません。

基本的に、リソースはキー値 (id と文字列) のリストであり、それほど大きくはありません (要素数は 100 を超えません)。

そのため、ほとんどの場合は必要ないため、同期のオーバーヘッドを回避するために読み取りメソッドにロックをかけたくありませんが、リソースを更新する必要があるときに使用したいと思います。

私の質問は次のとおりです。次のようなことを行う方法はありますか:

また、これを達成しようとするのは本当に便利ですか、それとも間違った方法でGetメソッドでロックを使用する必要がありますか?

編集:

さらにGoogle検索を行った後、より正確な質問があります. クラス参照が他のスレッドで使用されているかどうかを知ることは可能ですか?

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

c# - スレッド同期の問題、3 つのスレッドが同時に実行され、他のスレッドが待機している間に 4 番目のスレッドを実行する必要がある

タイトルで申し訳ありませんが、私の問題を説明するのにこれ以上のものが見つかりませんでした...

アプリケーションで異なるスレッドを同期するのに苦労しています。これはおそらく、この問題に新しい見方を持っている人にとっては簡単な問題ですが、デッドロックについて何時間も調査した後、私の頭は爆発しており、同期メカニズムを作成する適切で安全な方法を見つけることができません:(

基本的に、複数のスレッドで実行される .Net プロセスがあります (すべてが 1 つのプロセスで実行されるため、IPC は必要ありません)。私は4つのスレッドを持っています:

  • 1 つのスレッド、それがSpecificThreadと呼ばれているとします。System.Timers.Timer定期的にコードを実行する があります。
  • 他に 3 つのスレッドがあり、それぞれが定期的にコードを実行するサービスを実行しています ( while (true)loop + Thread.Sleep(few ms))。

3 つのサービスはすべて同時に実行する必要があります。それらの同時実行がスレッドセーフであることを保証します。4 番目のスレッドであるSpecificThreadは、そのコードを定期的に実行する必要がありますが、他の 3 つのサービスの実行をブロックする必要があります。

基本的に、コードを定期的に実行するSpecificThreadがあります。SpecificThreadがそのコードを定期的に実行する場合、他のサービスがタスクを完了するまで待機する必要があります。他の 3 つのサービスがすべてタスクを完了したら、他の 3 つのサービスがブロックされている間、そのSpecificCodeを実行する必要があります。そのSpecificCodeが実行されると、他の 3 つのサービスがコードを再度実行できます。

SynchronizationContext4 つのスレッドすべてで共有されるオブジェクトの共有インスタンスがあります。これを使用してスレッドを同期できます。

3 つのサービスの実行メカニズムは次のようになります。

SpecificThread実行メカニズム:

SpecificThread他の人が待っている間だけ実行する必要があるため、クリティカルセクションの使用方法がわかりません。Semaphore私は、 norを使用する方法を見つけられませんでしたAutoResetEvent(それらを使用すると、コードでデバッグが困難なデッドロックが発生しました)。ここでアイデアが不足しています...Interlocked静的メソッドが役立つでしょうか?

最後の言葉: 私のコードは .Net 3.5 で実行する必要があります。TPL もCountdownEventクラスも使用できません...

どんな助けでも大歓迎です!

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

c# - バックグラウンドワーカーの実行中にWPFテキストボックスを更新

TextBoxの実行中に継続的に更新しようとしてBackgroundWorkerいます。

私が使用しているコードは、私のアプリケーションをフリーズします:

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

memory-management - CUDA:スレッドはすべてのデータの個別のコピーを作成できますか?

ドキュメントを調べた後、理解できない非常に基本的な質問があります。出力が完全に破損しているため、プロジェクトの1つを実行しているときにこの問題に直面しています。問題はメモリ割り当てまたはスレッド同期のいずれかにあると考えられます。問題は、すべてのスレッドが、カーネル関数に渡されたすべての変数とポインターの個別のコピーを作成できるかどうかです。または、変数のコピーを作成するだけですが、そのメモリを渡すポインターはすべてのスレッド間で共有されます。例えば

したがって、dDC4_in と dDC4_out ポインターを GPU に渡し、dDC4_in をいくつかの値で初期化し、dDC4_out を計算してホストにコピーします。1280 のすべてのスレッドが個別の dDC4_in/out コピーを持つか、GPU で同じコピーで動作し、他のスレッドの値?

0 投票する
4 に答える
104 参照

java - 別のスレッドにアクセスする Java スレッド

Runnable インターフェイスを実装する 2 つのオブジェクトがあります。

Thread_1およびThread_2オブジェクトがあるとします。

Thread_1にはグローバル変数myVariable がありますmyVariable変数を使用するメソッドmyMethod()

Thread_2にはThread_1型の変数があります

したがって、シナリオは次のとおりです。

両方のスレッド: Thread_1Thread_2が実行されています。

Thread_1が現在myMethod() ( myVariable を使用)を使用しており、同時にThread_2がThread_1を介してThread_1myVariableを使用している場合( myMethod()メソッドを呼び出さずに)、 myVaribale変数を同期する必要がありますか?

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

java - Java Puzzler: ビジー待機スレッドが機能しなくなる

これはある種の Java Puzzler で、私が偶然見つけたもので、実際には説明できません。たぶん誰かができますか?

次のプログラムは、しばらくするとハングします。2 回出力した後、80 回出力した後ということもありますが、ほとんどの場合、正しく終了する前に発生します。初めて実行しない場合は、数回実行する必要がある場合があります。

ここで、ビジーな待機ループが一般的には良い考えではないことは明らかです。しかし、これは改善ではなく、何が起こっているのかを理解することです。

フィールドが に設定されている場合、またはフィールドが に設定されているWorkerThread.setWork()場合、すべてが期待どおりに機能するため、メモリの問題が疑われます。synchronizedWorkerThread.workToDovolatile

しかし、なぜそれが起こっているのでしょうか?デバッグは役に立ちません。ステップスルーを開始すると、すべてが期待どおりに動作します。

説明をいただければ幸いです。

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

c# - 本の「現在の SynchronizationContext は現在のスレッドのプロパティです」というフレーズは正しいですか?

「現在のSynchronizationContextは現在のスレッドのプロパティです」というフレーズを読んだので、少し混乱しています...

VS2010 の C# アプリ コードで入力すると、Thread.CurrentThread.Intellisense によって提供される選択肢のドロップダウン リストに、スレッドのコンテキスト関連のプロパティが見つかりません。

現在の同期コンテキストは " " を介して取得できることを知っています= SynchronizationContext.Current;。しかし、これは、並列スレッドやタスクなどで同時に実行される場合には、あまり幸運ではありません。

コンソールまたは WPF (*)アプリから、独自のメイン UI スレッドと TPL タスクでいくつかの Windows フォームを作成して起動するとします。

各 winform には独自のWindowsFormaSynchronizationContextが必要であり、WPF には独自のDispatcherSynchronizationContext ( SynchronizationContext クラスのサブクラス) インスタンスが必要であり、タスクは独自の同期コンテキストを持つThreadPoolで実行され、 LongRunning タスクはそのスレッド プールから実行される可能性があります。独自の同期コンテキスト...

では、なぜSynchronizationContextスレッドから定義できないのでしょうか? 「特定のスレッドから SynchronizationContext を取得する」という質問に対するすべての回答は、この可能性を否定する点で全会一致のようです...

最後になりましたが、「現在の SynchronizationContext は現在のスレッドのプロパティです」
というフレーズは正しいですか? 次に、さまざまな特定のスレッド インスタンスに対してこのプロパティの値を取得するにはどうすればよいですか?

(*)
最近、本質的に winform を使用する C# WPF アプリ コードが提供されました。

0 投票する
4 に答える
1427 参照

c - 2 つのスレッドで同じスレッド プロシージャを使用できますか?

CreateThread() が使用されている場合、2 つのスレッドが単一の関数「ThreadProc」をスレッド プロシージャとして使用することは可能ですか?

上記のコードは、それぞれ同じ機能を持つ 2 つのスレッドを作成します (両方のスレッドのスレッド手順が同じであるため)。正しく実行していますか?

可能であれば、両方のスレッドが同じスレッド プロシージャを使用しているため、同期の問題が発生します。

これで私を助けてください。私は本当に混乱していて、インターネット上で何も見つけることができませんでした.