I'm trying to write some code that creates threads that can modify different parts of memory concurrently. I read that a mutex is usually used to lock code, but I'm not sure if I can use that in my situation. Example:
using namespace std;
mutex m;
void func(vector<vector<int> > &a, int b)
{
    lock_guard<mutex> lk(m);
    for (int i = 0; i < 10E6; i++) { a[b].push_back(1); }
}
int main()
{
    vector<thread> threads;
    vector<vector<int> > ints(4);
    for (int i = 0; i < 10; i++)
    {
        threads.push_back(thread (func, ref(ints), i % 4));
    }
    for (int i = 0; i < 10; i++) { threads[i].join(); }
    return 0;
}
Currently, the mutex just locks the code inside func, so (I believe) every thread just has to wait until the previous is finished.
I'm trying to get the program to edit the 4 vectors of ints at the same time, but that does realize it has to wait until some other thread is done editing one of those vectors before starting the next.
 
     
     
     
     
    