【发布时间】:2015-05-17 16:21:37
【问题描述】:
我在问一个关于多线程的问题。
假设我有两个全局向量,
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 >。
我是新手,我感觉只能用互斥锁锁定一个变量。换句话说,只能放 vec1.push_back(myObj1) 或 vec2.push_back(myObj2)在 pthread_mutex_lock(mutex) 和 pthread_mutex_unlock(mutex) 之间。
我不知道我上面的代码是否正确。如果我错了,有人可以纠正我吗?
【问题讨论】:
-
旁注:您可以考虑使用 std::thread (C++11) 并将向量作为参考(通过 std::ref)传递给线程函数(以避免全局变量)。
标签: c++ multithreading pthreads