Sync allows an object to be used by multiple threads at the same time.
&T being sendable to multipel threads allows this naturally.
How to simulate Sync for an arbitrary type?
Mutex or RwLock allows only one thread to access the data. This behavior enforcing the sharing order of the data can make non-Sync object work like a Sync object.
Use atomic types
Non-Sync: can be only used by a single thread at any single time (their reference cannot be moved or copied to other thread)
Send trait
Send allows an object to be used by multiple threads at different times.
Rustβs ownership model and move semantics allow the non-overlapping use of the object.
Non-Send: can only ever be onwed by a single thread (self cannot be moved or copied to other thread)
<Sync + !Send>: If the object can be used safely by two threads at the same time