Memory Reuse, Child Task
Occurs when two tasks write to a shared
memory location, where a parent task overwrites a variable with a new value
that was read by a previously executed child task. A child task is a task
nested inside another task.

ID
| Code Location
| Description
|
---|---|---|
1
| Allocation site
| If present, and if the memory involved is heap
memory, represents the location and associated call stack when the memory was
allocated.
|
2
| Parallel site
| If present, represents the location and
associated call stack of the parallel site containing the Memory Reuse, Child
Task problem.
|
3
| Read
| Represents the instruction and associated call
stack of the first access if it is a memory read.
|
4
| Write
| Represents the instruction and associated call
stack of the second access if it is a memory write.
|
Example
int global; void main() { ANNOTATE_SITE_BEGIN(reuse_site); // Begin parallel site ANNOTATE_TASK_BEGIN(task111); assert(global == 111); // Read ANNOTATE_TASK_END(); global = 222; // Write ANNOTATE_SITE_END(); }
In this example, a parent task is writing to a shared
variable after a task that reads that same variable.
Some Possible Correction Strategies
Create a private copy of the variable before executing
the child task. Use the private copy in the child task.