Sha*_*awn 6 c++ multithreading pthreads
我问的是关于多线程的问题.
说我有两个全局向量,
std::vector<MyClass1*> vec1
Run Code Online (Sandbox Code Playgroud)
和
std::vector<MyClass2*> vec2.
Run Code Online (Sandbox Code Playgroud)
另外,我总共有4个线程可以访问vec1和vec2.我可以编写如下代码吗?
void thread_func()
// this is the function that will be executed by a thread
{
MyClass1* myObj1 = someFunction1();
MyClass2* myObj2 = someFunction2();
// I want to push back vec1, then push back vec2 in an atomic way
pthread_mutex_lock(mutex);
vec1.push_back(myObj1);
vec2.push_back(myObj2);
pthread_mutex_unlock(mutex);
}
for(int i=0; i<4; i++)
{
pthread_t tid;
pthread_create(&tid, NULL, thread_func, NULL);
}
Run Code Online (Sandbox Code Playgroud)
我想要做的是,我想在vec1上执行push_back,然后在vec2上执行push_back .
我是新手,我觉得只能用互斥锁锁定一个变量.换句话说,只能在pthread_mutex_lock(mutex)和pthread_mutex_unlock(mutex)之间放置vec1.push_back(myObj1)或vec2.push_back(myObj2 ).
我不知道上面的代码是否正确.如果我错了,有人可以纠正我吗?
你的代码是正确的.互斥锁是锁定的东西,而不是变量.您锁定互斥锁以保护一段代码不被多个线程执行,最常见的是保护数据,但通常它实际上是在保护一段代码.