Section: 16.4.5.10 [res.on.objects] Status: C++11 Submitter: Beman Dawes Opened: 2009-03-27 Last modified: 2016-01-28
Priority: Not Prioritized
View all other issues in [res.on.objects].
View all issues with C++11 status.
Discussion:
N2775, Small library thread-safety revisions, among other changes, removed a note from 16.4.5.10 [res.on.objects] that read:
[Note: This prohibition against concurrent non-const access means that modifying an object of a standard library type shared between threads without using a locking mechanism may result in a data race. --end note.]
That resulted in wording which is technically correct but can only be understood by reading the lengthy and complex 16.4.6.10 [res.on.data.races] Data race avoidance. This has the effect of making 16.4.5.10 [res.on.objects] unclear, and has already resulted in a query to the LWG reflector. See c++std-lib-23194.
[ Batavia (2009-05): ]
The proposed wording seems to need a bit of tweaking ("really bad idea" isn't quite up to standardese). We would like feedback as to whether the original Note's removal was intentional.
Change the phrase "is a really bad idea" to "risks undefined behavior" and move to Review status.
[ 2009-10 Santa Cruz: ]
Note: Change to read: "Modifying...", Delete 'thus', move to Ready
Proposed resolution:
Change 16.4.5.10 [res.on.objects] as indicated:
The behavior of a program is undefined if calls to standard library functions from different threads may introduce a data race. The conditions under which this may occur are specified in 17.6.4.7.
[Note: Modifying an object of a standard library type shared between threads risks undefined behavior unless objects of the type are explicitly specified as being sharable without data races or the user supplies a locking mechanism. --end note]