我是一个有用的助手,可以为您翻译文本。
我正在询问关于多线程的问题。
假设我有两个全局向量,
并且。
我想做的是在vec1上执行push_back,然后在vec2上执行push_back。
我是一个新手,我有一种感觉,即一个互斥锁只能锁定一个变量。换句话说,在pthread_mutex_lock(mutex)和pthread_mutex_unlock(mutex)之间只能放置vec1.push_back(myObj1)或vec2.push_back(myObj2)中的一个。
我不知道我上面的代码是否正确。如果我错了,有人可以纠正我吗?
我正在询问关于多线程的问题。
假设我有两个全局向量,
std::vector<MyClass1*> vec1
并且。
std::vector<MyClass2*> vec2.
此外,我有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);
}
我想做的是在vec1上执行push_back,然后在vec2上执行push_back。
我是一个新手,我有一种感觉,即一个互斥锁只能锁定一个变量。换句话说,在pthread_mutex_lock(mutex)和pthread_mutex_unlock(mutex)之间只能放置vec1.push_back(myObj1)或vec2.push_back(myObj2)中的一个。
我不知道我上面的代码是否正确。如果我错了,有人可以纠正我吗?