This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++14 status.

### 2200. Data race avoidance for all containers, not only for sequences

Section: 22.2.2 [container.requirements.dataraces] Status: C++14 Submitter: Jonathan Wakely Opened: 2012-10-17 Last modified: 2016-01-28

Priority: Not Prioritized

View all other issues in [container.requirements.dataraces].

View all issues with C++14 status.

Discussion:

22.2.2 [container.requirements.dataraces]/2 says "[…] implementations are required to avoid data races when the contents of the contained object in different elements in the same sequence, excepting `vector<bool>`, are modified concurrently."

This should say "same container" instead of "same sequence", to avoid the interpretation that it only applies to sequence containers.

[2013-03-15 Issues Teleconference]

Moved to Tentatively Ready.

[2013-04-20 Bristol]

Proposed resolution:

This wording is relative to N3376.

1. Change 22.2.2 [container.requirements.dataraces]/2 as indicated:

   > -2- Notwithstanding (16.4.6.10 [res.on.data.races]), implementations are required to avoid data races when the contents of the contained object in different elements in the same sequence container, excepting `vector<bool>`, are modified concurrently.

   > -3- [Note: For a `vector<int> x` with a size greater than one, `x[1] = 5` and `*x.begin() = 10` can be executed concurrently without a data race, but `x[0] = 5` and `*x.begin() = 10` executed concurrently may result in a data race. As an exception to the general rule, for a `vector<bool> y, y[0] = true` may race with `y[1] = true`. — end note ]