遍历向量,而其他线程可能会对其进行修改

时间:2019-03-12 00:23:53

标签: c++ multithreading mutex

我没有多线程经验,但是我需要在套接字编程中使用它。我的问题是,我需要遍历类的静态向量,但是,当我这样做时,其他线程会从该向量中删除元素,这会使我的程序崩溃。我假设我需要某种方式锁定向量,但我不知道如何锁定。我发现的唯一解决方案似乎是Windows特定的(Concurrency :: concurrent_vector)。这是我的代码:

#include <pthread.h>
#include <thread>
#include <mutex>

std::vector<User*> User::users;
std::mutex mtx;

int main() {
  //...
  mtx.lock();
  for (int i = 0; i < User::users.size(); ++i) {
    User::users.at(i)->stop = true;
    User::users.at(i)->shutdownSocket();
  }
  mtx.unlock();
}

这似乎没有锁定矢量。我在Ubuntu上使用CLion。我如何安全地做到这一点?

编辑:我在访问向量的任何地方都包含mtx.lock()和unlock()。我已经仔细检查过了。

使用在main.cpp中声明的一个互斥锁和在User.h中声明的互斥锁是否重要?我必须对同一向量使用相同的互斥体吗?

0 个答案:

没有答案