A newer version of this document is available. Customers should click here to go to the newest version.
Memory Watch
Occurs when a task accesses a memory location marked by an ANNOTATE_OBSERVE_USES annotation. In this case, this problem provides informational feedback only and no action is required. This is useful for finding uses of specified memory locations while a task is executing.
One of the following has occurred:



ID  |  
        Code Location  |  
        Description  |  
       
|---|---|---|
1  |  
        Parallel site  |  
        If present, represents the location and associated call stack of the parallel site containing the Memory Watch problem.  |  
       
2  |  
        Watch start  |  
        Represents the location and its associated call stack where an ANNOTATE_OBSERVE_USES() annotation marks a memory location.  |  
       
3  |  
        Read  |  
        Represents the location and associated call stack where a task read the watched memory location.  |  
       
4  |  
        Write  |  
        Represents the location and associated call stack where a task wrote the watched memory location.  |  
       
5  |  
        Update  |  
        Represents the location and associated call stack where a task read and wrote the watched memory location.  |  
       
Example
void watch_memory()
{
   ANNOTATE_OBSERVE_USES(&watch, sizeof(watch));  // Watch start
   ANNOTATE_SITE_BEGIN(watch_site);               // Parallel site
   {
       ANNOTATE_TASK_BEGIN(watch_task1);
       {
           ANNOTATE_LOCK_ACQUIRE(&watch);
           watch++; /* watch memory */            // Read and/or Write
           ANNOTATE_LOCK_RELEASE(&watch);
       }
       ANNOTATE_TASK_END();
       ANNOTATE_TASK_BEGIN(watch_task2);
       {
           ANNOTATE_LOCK_ACQUIRE(&watch);
           watch++; /* watch memory */            // Read and/or Write
           ANNOTATE_LOCK_RELEASE(&watch);
       }
       ANNOTATE_TASK_END();
   }
   ANNOTATE_SITE_END();
   ANNOTATE_CLEAR_USES(&watch);
} 
   This example reports all places that use the memory location referenced by watch during the call to watch_memory().
Possible Correction Strategies
To use ANNOTATE_OBSERVE_USES to help you correct an incidental sharing problem, do the following to mark places where you may be able replace uses of a shared memory location with uses of a non-shared memory location:
Add an ANNOTATE_OBSERVE_USES annotation to the task.
Find all uses of the shared memory location in the dynamic extent of the task.