gpt4 book ai didi

c++ - 我可以同时锁定多个变量吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:34:10 26 4
gpt4 key购买 nike

我在问一个关于多线程的问题。

假设我有两个全局 vector ,

std::vector<MyClass1*> vec1 

std::vector<MyClass2*> vec2. 

此外,我总共有 4 个线程可以访问 vec1vec2。我可以这样写代码吗?

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) 之间。

我不知道我上面的代码是否正确。如果我错了,有人可以纠正我吗?

最佳答案

您的代码是正确的。互斥量是被锁定的东西,而不是变量。您锁定互斥锁以保护一段代码不被多个线程执行,最常见的是保护数据,但通常它实际上是在保护一段代码。

关于c++ - 我可以同时锁定多个变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30289161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com