OpenMP and STL vector OpenMP and STL vector multithreading multithreading

OpenMP and STL vector


In this particular example, it will be safe.

The reason is that you are not using operations that could cause a reallocation. (such as push_back()). You are only changing the contents of the individual elements.

Note that you can just as legally do this:

std::vector<int> v(1000);int *ptr = &v[0];# pragma omp parallel forfor (int i = 0; i < 1000; ++i) {    ptr[i] = i;}

It becomes not-thread-safe when you start calling methods like push_back(), pop_back(), insert(), etc... from multiple threads.

I'll also add that this particular example isn't well-suited for parallelism since there's hardly any work to be done. But I suppose it's just a dumbed-down example for the purpose of asking this question.


Multiple reads are safe but I would recommend to avoid multiple writes to the same container. But you can write to memory you manage on your own. The difference to a vector would be that you can be sure that the memory would not be changed or reallocated at the same time. Otherwise you can also use a semaphore but this would probably decrease the efficiency and if you use several it can even cause deadlocks if you don't work properly.