結合済みまたは分離済みスレッドの結合または分離
以前に結合または分離されたスレッドの再結合または再分離
説明
このチェッカーは、既定の Polyspace® as You Code 解析では非アクティブにされます。Polyspace as You Code 解析で非アクティブにされるチェッカー (Polyspace Access)を参照してください。
この欠陥は、以下の場合に発生します。
以前に結合または分離されたスレッドを結合しようとする。
以前に結合または分離されたスレッドを分離しようとする。
[結果の詳細] ペインには、そのスレッドが以前に結合または分離されたかどうかが表示されます。また、それまでの関連するイベントも表示されます。
たとえば、thrd_join で結合されたスレッドは、thrd_detach で分離されます。
thrd_t id; ... thrd_join(id, NULL); thrd_detach(id);
スレッドが結合済みと見なされるのは、以前のスレッド結合が成功した場合のみです。たとえば、次の if 分岐ではスレッドは結合済みと見なされません。
thrd_t t;
...
if (thrd_success != thrd_join(t, 0)) {
/* Thread not considered joined */
}thrd_current() などを使用して結合済みスレッドを分離させる場合、解析では検出できません。リスク
C11 規格 (7.26.5.3 節および 7.26.5.6 節) では、結合または分離したことのあるスレッドを結合または分離してはならないと規定しています。規格のこれらの節に違反することは未定義の動作になります。
修正方法
以前に結合または分離されたスレッドは結合しないようにします。既に結合または分離されたスレッドは分離しないようにします。
例
結果情報
| グループ: 同時実行 |
| 言語: C |
| 既定値: オフ |
コマンド ライン構文: DOUBLE_JOIN_OR_DETACH |
| 影響度: Medium |
バージョン履歴
R2019b で導入