Breaking change: fix(SystemBuilder): replace multi_threaded with par_each #254
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Requires multi-threaded system handlers to be
Fn + Send + Syncto avoid undefined behavior from having multiple&mutreferences to the same value and moving!Sendand!Synctypes across threads.The current API which accepts
FnMutforSystemAPI::eachand the each variants (each_entity,each_iter) allows for undefined behavior because it can share types that are !Send and !Sync across threads when multi_threaded is enabled, and it also creates multiple&mutreferences to the sameFnMutobject in multiple threads.Example of this problem:
outputs
showing how the value is illegally shared.
To fix this, there are now
parvariants of theeachfunctions which acceptFn + Send + Sync.