メモリー監視

タスクがANNOTATE_OBSERVE_USESアノテーションでマークされたメモリーにアクセスすると発生します。この場合、問題は情報を示すだけでありアクションは必要ありません。これは、タスクの実行中に参照されるメモリー位置の使用を特定するのに役立ちます。

次のいずれかの条件が発生しました。

問題のタイプ: メモリー監視

問題のタイプ: メモリー監視

問題のタイプ: メモリー監視

ID

コードの場所

説明

1

並列サイト

存在する場合、メモリー監視の問題を含む並列サイトの位置と関連するコールスタックを示します。

2

監視開始

メモリー位置をマークするANNOTATE_OBSERVE_USES();アノテーションの場所と関連するコールスタックを示します。

3

読み取り

タスクが監視されているメモリー位置を読み取った場所と関連するコールスタックを示します。

4

書き込み

タスクが監視されているメモリー位置に書き込んだ場所と関連するコールスタックを示します。

5

更新

タスクが監視されているメモリー位置を読み書きした場所と関連するコールスタックを示します。

void watch_memory() { 
     ANNOTATE_OBSERVE_USES(&watch, sizeof(watch)); // 監視開始 
          ANNOTATE_SITE_BEGIN(watch_site); 	                   // 並列サイト 
          { 
               ANNOTATE_TASK_BEGIN(watch_task1); 
               { 
                    ANNOTATE_LOCK_ACQUIRE(&watch); 
                        watch++; /* メモリーを監視 */                            // 読み取りと/または書き込み 
                    ANNOTATE_LOCK_RELEASE(&watch); 
               } 
               ANNOTATE_TASK_END(); 
               ANNOTATE_TASK_BEGIN(watch_task2); 
               { 
                    ANNOTATE_LOCK_ACQUIRE(&watch); 
                         watch++; /* メモリーを監視 */                          // 読み取りまたは書き込み 
                    ANNOTATE_LOCK_RELEASE(&watch); 
               } 
               ANNOTATE_TASK_END(); 
     } 
     ANNOTATE_SITE_END(); 
     ANNOTATE_CLEAR_USES(&watch); 
}

この例は、watch_memory() の呼び出し中に watch で参照されるメモリー位置を参照するすべての場所をレポートします。

修正方法

偶発的な共有の問題を修正するため ANNOTATE_OBSERVE_USES を使用するには、共有メモリーを非共有メモリーに置き換えられる場所をマークするため次の操作を行います。

  1. タスクに ANNOTATE_OBSERVE_USES アノテーションを追加します。

  2. 動的タスク範囲における、共有メモリー位置の使用をすべて検出します。