Main Content

同時実行の欠陥

マルチタスキング コードに関連する欠陥

これらのチェッカーは、複数のタスクが 1 つの非保護変数に作用するデータ レースや、クリティカル セクションがデッドロックに関与するロックの欠陥など、マルチタスキング コードに関連した問題をチェックします。Polyspace でコード内のスレッドとクリティカル セクションを検出するか、Polyspace コンフィギュレーションでスレッドとクリティカル セクションを手動で定義できます。

Polyspace 結果

すべて展開する

データ レース複数タスクによる共有変数に対する保護されない非アトミック操作の実行
隣接するビット フィールドでのデータ レース複数のスレッドが共有されたデータ構造体の隣接するビット フィールドで非保護操作を実行 (R2020b 以降)
標準ライブラリ関数呼び出しでデータ レースが発生しましたスレッドセーフでない標準ライブラリ関数に対して、複数のタスクから保護されていない呼び出しが行われています。
ロック保持中のブロック操作ロック保持中のタスクによる長時間かかる操作の実行
デッドロックロック関数の呼び出し順による 2 つのタスクの相互ブロック
ロックされたミューテックスの破棄タスクによるロックされた状態のミューテックスの破棄の試み
ダブル ロックロック関数はタスク中 2 回呼び出されますが、その間にロック解除関数の呼び出しはありません。
ロック解除が重複していますロック関数はタスク中 2 回呼び出されますが、間にロック解除関数の呼び出しはありません。
ロックの欠落ロック関数を伴わないロック解除関数
ロック解除されていませんロック解除関数を伴わないロック関数
複数のミューテックスで同じ条件変数が使用されています同じ条件変数の同時待機が未定義の動作の場合に別々のミューテックスを使用しているスレッド (R2020a 以降)
非同期にキャンセル可能なスレッド呼び出し元スレッドが安全ではない状態でキャンセルされる可能性がある (R2020a 以降)
結合済みまたは分離済みスレッドの結合または分離以前に結合または分離されたスレッドの再結合または再分離 (R2019b 以降)
スレッド属性の欠落または二重初期化スレッド属性の初期化が重複しているか、初期化された属性を必要とする関数で使用されるスレッド属性が初期化されていない (R2019b 以降)
複数のスレッドが同じ条件変数を待機していますcnd_signal または std::condition_variable::notify_one() を使用して同じ条件変数を待機しているいずれかのスレッドに通知すると、無期限のブロッキングにつながる可能性がある (R2020a 以降)
マルチスレッド プログラムの信号呼び出し複数のスレッドを使用するプログラムでの関数 signal の使用
信号停止スレッドの使用キャッチされていない信号による、特定のスレッドではなくプロセス全体の強制終了
未定義のスレッド ID の使用スレッド作成に失敗したスレッド ID が後続のスレッド関数で使用された (R2019b 以降)
スレッドからエスケープする自動変数またはスレッド ローカル変数変数が後続スレッドの持続期間を通して有効であることが確認されないままスレッド間で渡される (R2020a 以降)
スレッド固有のメモリ リークスレッドの終了前に解放されていない動的に割り当てられたスレッド固有のメモリ
アトミックな読み込みと保存のシーケンスがアトミックではありません読み込み操作と格納操作の間にアクセス可能な変数
式の中でアトミック変数へのアクセスが 2 回行われています変数をアクセスの間に変更可能
誤って失敗する可能性のある関数はループでラップされません誤りの可能性がある失敗後のループによる失敗条件のチェック
誤って起動する可能性のある関数はループでラップされません誤りの可能性がある起動後のループによる起動条件のチェック

トピック