実行中のレース条件
Feb 08, 2024 pm 09:00 PMコードを実行すると、攻撃()関数に費やした時間が出力されることがあります。 攻撃がチャネルに書き込み、メインがそれを読み取り、タイマー(「攻撃」)の実行を待たずにメインが終了する場合、競合状態であることはわかっています
###私はここでは新人です:_)### リーリー誰かがこの状況に対処する方法を教えてください。両方の関数にかかった時間を出力し、チャネルを使用したいのですが
正解when
main
が終了すると、プログラムは終了しますが、同時実行ゴルーチンは正常に終了しません (多くのプログラムでは、メイン以外のゴルーチンはまったくシャットダウンされない二次的な「デーモン」です)。そのため、既存の goroutine が遅延するという保証はありません。走ります。これがここで起こっていることです。スモークシグナルを送信するときに、攻撃
ゴルーチンがスケジュール解除されると、main は再スケジュールされる前に戻ることができるため、defer
は実行されません。
これに対処するには多くのオプションがありますが、それらはすべて基本的に同じ結果につながります。関数の実行後に
がチャネル上で送信されていることを確認してください。これは、たとえば (すべてではありません)
タイマーの前にメッセージの送信を延期します (逆の順序で実行を延期します)-
サブ関数の
- defer()、外部関数の signal
- 遅延を使用しないでください。シグナルを送信する前に終了メッセージを実行するだけです
- メッセージと出力を別々に送信するのではなく、関数のランタイムをチャネル経由で送信し、呼び出し元にフォーマットとレポートを行わせます。
以上が実行中のレース条件の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?
