問題タブ [reentrancy]

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

c - マルチスレッドプログラムの再入可能関数でグローバル配列をロックしていますか?

質問のタイトルがわかりにくい場合は申し訳ありません。私はすべてのものをまとめたかっただけです。次のようなコードがあります。

スレッド[] はグローバル配列です。この関数を再入可能にしたいのですが、これは、私が理解している限り、グローバル変数を使用すべきではないことを意味します。これは、グローバル変数の値が特定の時点で予測不能になる可能性があるためだと思います。しかし、私の場合、配列はかなり予測可能であるようです。

  1. この関数を再入可能にするためにミューテックスで配列をロックしても大丈夫ですか?
  2. はいの場合、どうすれば正しくできますか? それを使用する前に最初の要素をロックし、後でロックを解除するだけですか? または、アクセス中にすべての要素をロック/ロック解除する方が良いですか?
  3. これは、この関数を再入可能にすることさえ可能ですか?
0 投票する
2 に答える
1105 参照

c# - 次のコードは再入可能でスレッドセーフですか?

次のコードは再入可能ですか?

this.NextToExecuteIndexが宣言されprivate int NextToExecuteIndex = 0;、他の場所で計算されていない場合、それはスレッドセーフですか?

0 投票する
0 に答える
131 参照

api - 再入可能性の防止と一貫した状態の強制

たとえば、次のような C API があるとします。

これらの関数は、再入可能ではないと文書化されています。これを強制する必要がありますか (たとえば、どこかにフラグを設定し、適切なエラー コードを返すことによって)、またはオフの場合は未定義の動作として記述する必要がありますか? 私が見たコードのほとんどは、これを試みていません。それが意識的な決定なのか、それとも単なるプラグマティズム (あるいは怠惰) なのか、私はただ疑問に思っています。本当に堅牢なコードを書きたい場合は、次のようなことを試してください。一方、ドキュメントに従っていない場合は、おそらくすべての賭けをオフにする必要があります。

SDK の保守を担当するチームの一員として、私の経験は時々恐ろしいものでした。確かに私たちのドキュメンテーションは素晴らしいものではありませんが、OEM のサポート リクエストでかなり奇妙なことがいくつか見られました。それらのかなりの数は、別の関数によって呼び出されたコールバックのコンテキストで関数を呼び出すことから生じます。これらのほとんどはサポートされていないと文書化されていますが、それを防ぐためのコードはありません。実際、これのほとんどのインスタンスは機能しているように見えますが、実際に内部状態を台無しにするものもあります。人にドキュメントを読んでもらうよりも、適切な API の使用を強制する方が簡単な場合があるようです。

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

java - ReentrantLock:シングルスレッドアプリケーションの速度をロック/ロック解除します

ReentrantLockを使用して、複数のスレッド間でリストへのアクセスを同期しています。ジェネリックを書くだけです

どこにでも。ただし、コード全体のリストのほとんどは、単一の(GUIディスパッチ-)スレッドでのみ使用されることに気づきました。

コードが高速化される可能性があるため、これらの場合にロックを解除する必要があるかどうかはわかりません。ReentrantLockの速度はどれくらいですか?スレッド自体がロックの「前の所有者」である場合、たとえ彼がそれをアンロック()したとしても、lock()操作は何とか速くなりますか?

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

multithreading - スレッド対応とスレッドセーフの違いは何ですか?

スレッド認識とスレッドセーフの違いは何ですか?

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

windows - Windows:(NDIS)カーネルドライバーからスレッドを生成する方法は?

NDIS5 / 6コンテキスト内で新しいスレッドを生成するために推奨される関数はどれですか?IRQL = PASSIVEで動作することが保証されているものを探しています(たとえば、何もないところからbsodがない)。内容をざっと調べてndis.hも何も見つかりませんでした。

また、新しく生成されたスレッドを使用してNdisFreeMemory*ファミリを呼び出すことが計画されていますが、割り当てられているが未使用のメモリを別のスレッドから解放するのに問題が発生しますか?

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

c - malloc() は非再入可能ですが、スレッドセーフですか?

重複の可能性:
Malloc スレッドセーフ?

「The Linux Programming Interface」を読んでいる間、少し混乱することはありません。

この本によると、malloc はグローバル リンク リスト データ構造を操作するため再入不可ですが、mutex を使用することでスレッド セーフになっています。

私はこれについて少し混乱しています.mutexを使用するとスレッドセーフであり、同時に複数のスレッドから呼び出すことができるため、再入可能関数ではないのはなぜですか? (再入可能とは、同時に複数の呼び出し元から呼び出すことができることを意味します)

もう 1 つの質問は、malloc はスレッドセーフなので、シグナル ハンドラに入れることができるかということです。答えはイエスだと思いますが、この本によると、再入可能または非同期シグナルセーフ関数のみをシグナルハンドラーに入れることができると書かれているため、よくわかりません。

誰かが私にこれを説明できますか?

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

boost - Boost の再入可能性

マルチスレッドを使用する場合、使用するブースト クラスが再入可能であることを確認する必要があります (各スレッドが独自のオブジェクト インスタンスを使用する場合でも)。

Boost のクラスのドキュメントで、クラスの再入可能性に関する記述を見つけるのに苦労しています。ここで何か不足していますか?ドキュメントで特に明記されていない限り、Boost のすべてのクラスは再入可能ですか? それとも、再入可能性に関する Boost のドキュメントは灰色の領域ですか?

たとえば、ドキュメントのどこにも、boost::numeric::ublas∷matrix クラスの再入可能性に関する記述が見つかりませんでした。それで、再入可能かどうかを推測できますか?

ありがとう!

オファー

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

c# - WCF との再入可能な二重通信

相互に通信し、コマンドを実行し、データをやり取りする必要がある複数のインスタンスを持つ C# プログラムがあります。現在、これは非常に面倒な WM_COPYDATA を使用して実現されています。NetNamedPipeBindings を使用して、これを WCF システムにアップグレードしたいと考えています。しかし、どのような設定を試しても、リエントラント二重通信が機能しません。

これは通常の WCF 呼び出しです。

そして、これは私が欲しいものです:

重要なのは、proxy.foo を呼び出すクライアント スレッドを、proxy.baz を呼び出すスレッドと同じにすることです。Windows メッセージの場合、これは当然のことです。しかし、どのような設定を試しても、このパターンを WCF で機能させることはできません。それは可能ですか?

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

multithreading - スレッドセーフと非同期信号セーフ

APUPセクション12.5で、次のように述べています。

「関数が複数のスレッドに関して再入可能である場合、それはスレッドセーフであると言います。ただし、これは、関数がシグナルハンドラーに関して再入可能であるかどうかを示しません。」

関数がスレッドセーフであるのに、非同期信号セーフではないのはなぜか混乱していました。

例はありますか?

ありがとう