Our primary mechanism for managing state in Swift is through property wrappers and locks. However, there are a few other options for managing state in concurrent environments. Here we’ll look at using the Atomic property wrapper for atomic counters accessed by multiple threads.
We expect to get exactly 50,000 operations. Had we used a non-atomic integer and incremented it with ops += 1, we’d likely get a different number, changing between runs, because the threads would interfere with each other. Moreover, we’d get data race failures when running with Thread Sanitizer enabled.
Next, we’ll look at locks, another tool for managing state in concurrent environments.