I am developing a multi threaded application, each thread will read (there will be no modifying of structures) from a group of maps and vectors. Can anyone please advise, since the threads are only reading from these structures would it be necessary to implement a sharable mutex around the code blocks where these structures are being read?
It isn't thread safe, insert from two threads and you can end up in an inconstant state.
const and Thread Safety Therefore all classes available from the standard, e.g. std::vector<>, can safely be accessed from multiple threads in the same manner.
YES for the scenario you mention, it is perfectly Thread Safe.
Yes it is. Show activity on this post.
In case of read only map/vector there is no need to use mutexes.
This was already answered for both vector and map
While C++03 doesn't mention threads, C++11 has clause covering you question.
1 For purposes of avoiding data races (17.6.5.9), implementations shall consider the following functions to be const: begin, end, rbegin, rend, front, back, data, find, lower_bound, upper_bound, equal_range, at and, except in associative or unordered associative containers, operator[].
2 Notwithstanding (17.6.5.9), implementations are required to avoid data races when the contents of the contained object in different elements in the same sequence, exceptingvector<bool>
, are modified concurrently.
3 [ Note: For avector<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 ]
Thus in C++11 it is allowed not only to read objects , but also allow concurrent modification of its different objects(but not container!), with exception for vector < bool >
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With