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?
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 (188.8.131.52), 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 (184.108.40.206), 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.
3 [ Note: For a
vector<int>x with a size greater than one, x = 5 and *x.begin() = 10 can be executed concurrently without a data race, but x = 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 = true may race with y = 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 >