I stumbled upon the thread safety article on Wikipedia; it distinguishes several levels of safety, especially:
Thread safe: Implementation is guaranteed to be free of race conditions when accessed by multiple threads simultaneously.
Conditionally safe: Different threads can access different objects simultaneously, and access to shared data is protected from race conditions.
But to me, both definitions look like different ways to say the same thing. Both guarantee there is no race condition on shared data.
Could someone explain the difference? Thanks.