Looking through the data changes there are a few types - if we consider a conceptual model where there is a main compiler thread that distributes work and collects it, and worker threads. A worker thread, or a work task will have local data that is private
This is after looking through the change that you have, and overlaps and contradicts the comments that I have made. This is more to open the conversation as to whatthe data access pattern is, and we should comment of that assumption as we make each change
something that is configured in the main thread only - may be a normal private var, but updates (and maybe reads) are validated with asserts to be on the main thread
Something that is local data on a worker thread - assert all access is on the worker thread and the task is the current task
Counters, ids and stats - AtomicIntegers etc - need to check for TOCTOU though for ids
Shared data written once only - need to validate that there are no races ( e.g. Symbol.info )
concurrent data - not sure I have seen any of that really
Looking through the data changes there are a few types - if we consider a conceptual model where there is a main compiler thread that distributes work and collects it, and worker threads. A worker thread, or a work task will have local data that is private
This is after looking through the change that you have, and overlaps and contradicts the comments that I have made. This is more to open the conversation as to whatthe data access pattern is, and we should comment of that assumption as we make each change