For example, multithreading would never work if mutexes were not resilient to multithreaded access (e.g., two simultaneous calls to mutex.lock() can't screw things up).
Does this extend to condition variables too? Specifically, I want to release a lock and then call cond.notify_one(). Theoretically, another thread could then grab the lock before the notification and begin it's own call to cond.notify_one(). Is there a guarantee that this will be well-behaved?
What about simple data structures allocated on the heap? Is it ok to allow concurrent access if the data structure is only being read, assuming the data structure is guaranteed not to self-adjust on a read? Is there documentation on which stl data structures, and member functions allow concurrent reads without requiring locking?