問題タブ [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.
c - グローバル変数を使用するが終了する関数は、シグナル ハンドラでは避ける必要がありますか?
C を使用した UNIX プログラミングについて調べたときに、再入可能に失敗する関数はシグナル ハンドラー内では避ける必要があることを学びましたが、次のような場合:
myExit の場所
そしてfileFdはグローバル変数であり、それがmyExitを再入不可にすることを正しく覚えていれば...しかし、それがプログラムの終了を引き起こしたとしても、シグナルハンドラーでそれを使用することはまだ問題ですか? ありがとう、それがばかげた質問であるならば、どんな助けでも感謝します。
bison - 統合型 YYSTYPE を使用して bison/flex パーサーを再入可能にする
bison/flex パーサーを再入可能にするための手順に従うのに苦労しています。
問題はレクサーにあるようです。すべてのパーサーは再入可能であるため、yylval を直接割り当てることはできなくなりました。代わりに、Flex のマニュアルに従って、この関数を呼び出す必要があります。
しかし問題は、YYSTYPE が整数型であることです。これは動的に割り当てられた値ではなく、左辺値ではないため、ポインターを渡すことはできません! 何か不足していますか? そうでない場合は、yylvalue をどのように設定すればよいですか? 非再入可能パーサーでこの問題が発生したことはありません!
更新:わかりました、整数型の問題を乗り越えた可能性があります。入力が設定されていないため、パーサーがクラッシュしたように見えます。入力を読み取る場所をレクサーに伝える方法に関するドキュメントが見つかりません。
フレックスファイル:
バイソンファイル:
パーサーの次の行でクラッシュが発生します。
解析のためにすべてを正しく初期化していない可能性があると思います。マニュアルはこの件に関して非常に混乱しており、多くの場合、型や変数がどこから来たのか、なぜ使用されるのかを説明せずに参照しています。私はこの方法で解析を呼び出しています:
ソースコードを読んでみると、yylex_init は a を割り当ててstruct yyguts_tゼロに設定しています。クラッシュに達したとき、yy_cp はヌル ポインターです。実際には、全体struct yyguts_tがまだゼロに設定されています。そのため、何かを適切に初期化していないと思われます。その結果、どこから入力を取得すればよいかわかりません。
最終編集:元の質問が回答されたため、この質問をクローズ済みとしてマークし、新しい問題を新しい質問として再度開きます。
c - この netbsd コードで再入可能かどうか
NetBSD のソースコードを読んで「コードを読む」ことを勉強しています。
(興味のある方は < Code Reading: The Open Source Perspective > を読んでいます)
そして、私はこの機能を見つけました:
inet_ntoa は再入可能ではないため、inet_ntoa 関数をラップするために 4 つの異なる一時バッファーが導入されています。
しかし、私には、この naddr_ntoa 関数も再入
可能ではないように思えます。静的な bufno 変数は他のユーザーによって操作される可能性があるため、ここでは一時バッファーが期待どおりに機能しないようです。
それで、それは潜在的なバグですか?
c - 変数の平均化を必要とする再入可能関数
これはかなり基本的なもので、良い解決策が思い浮かびません。スーパーループ タイプのアーキテクチャ (OS なし) のコードがいくつかあります。平均化を必要とする関数には、いくつかの真実があります。つまり、条件「True」を呼び出すには、同じ入力結果が 3 回続けて必要です。私の上司は現在、これらすべての関数を再入可能にすることを推進しています。つまり、静的ローカル変数の古い方法は役に立たないということです。彼はまた、追加のグローバルを望んでいません。関数が完全に再入可能になるように、複数のコンテキストに対して条件の平均化を維持する別の良い方法はありますか?
現在のコードの例:
java - 再入可能ロックの強制アンロック
私は自分のニーズに合わせてカスタマイズされたクラスでラップしている再入可能なロックを持っています。ただし、アプリケーションの性質上、再入可能ロックへのロックを保持しているスレッドがスタックし (外部障害)、再入可能ロックの解放に失敗します。
リエントラント ロックを明示的にロック解除する方法があるかどうか疑問に思っています。再入可能ロックの API にはそのようなメソッドがないことは知っていますが、一定時間後に再入可能ロックをロック解除するか、再入可能ロックを保持しているスレッドを強制終了するタイマー タスクを導入することを考えていました。
再入可能ロックを強制的にロック解除しようとする際に、他に何か提案はありますか? 私の解決策はかなりなので、私は尋ねます。
c - スレッドセーフで再入可能なコードでの utf8proc の使用
レガシ C アプリケーションをリファクタリングして、Unicode 対応にしています。現在char*、文字列に使用されています。私はutf8 ライブラリに出くわしましたが、ドキュメントがまばらで、スレッドセーフで再入可能であることが期待されるコードで使用するのに適しているかどうかを判断できません。
スレッドセーフ (POSIX) の再入可能コード環境で utf8proc を使用できるかどうかについて、明確な答えを知っている人はいますか?
timer - Dart: 作業をイベント ループに延期するサポートされている方法として、期間ゼロのタイマーを使用しています。
実験の結果、継続時間が 0 のタイマーを作成すると、作業をイベント キューに延期できることがわかりました。この機能は、多くの厄介な再入可能性の問題を回避できるため、非常に気に入っています。これは変更されない意図的な機能ですか? ドキュメントに追加できますか?そうでない場合、これを行うためのサポートされている方法はありますか?
c# - フレームワークには再入可能性を検出する専用の API がありますか?
メソッドの大規模なセットの再入を禁止したい。
単一のメソッドの場合、次のコードが機能します。
これは、すべてのメソッドに対して行うのは面倒です。
だから私は StackTrace クラスを使用しました:
正常に動作しますが、ハックのように見えます。
.NET Framework には、再入可能性を検出するための特別な API がありますか?
process - VHDL のプロセスは再入可能ですか?
のプロセスを 2 つ以上連続して実行することはできVHDLますか?
プロセスの順次実行が完了していない間に別のイベント (感度シグナル リストで) が発生した場合はどうなりますか?
それは可能ですか、それとも私VHDLのプロセスのモデルが完全に間違っていますか?