通过线程共享指针的 std::vector

Posted

技术标签:

【中文标题】通过线程共享指针的 std::vector【英文标题】:Sharing std::vector of pointers through threads 【发布时间】:2019-04-10 16:24:30 【问题描述】:

我想通过线程共享一个 std::vector 指针。每个线程都应该能够获取或删除指针并将其从向量中删除。我怎样才能使这个线程安全,C++ 标准库中是否有任何东西可以做到这一点?

【问题讨论】:

欢迎来到 ***!请查看How to Ask。如果您包含您尝试的代码,对其他人将非常有帮助! XY 问题警告。您的问题可能有更好的解决方案,不涉及共享指针向量... 如何使 any 共享数据线程安全的简短回答:每个线程在访问数据之前锁定一个互斥锁,每个线程将互斥锁锁定的时间最短可能,每个线程在解锁互斥锁之前确保数据处于一致的状态——其他线程可以安全地看到。请注意,“访问”仅包括查看数据。当另一个线程只完成一半的更改时,您通常不希望一个线程查看数据。 【参考方案1】:

只需编写类并使用同步对象(关键部分)保护成员函数。

查看this 示例。

【讨论】:

以上是关于通过线程共享指针的 std::vector的主要内容,如果未能解决你的问题,请参考以下文章

从向量中按内存地址删除共享指针

多线程访问共享资源

这种对共享指针向量的回退是不是会导致内存泄漏?

在多线程 C++ 程序中使用 std::vector 时应用程序崩溃

C++ std::vector 可以同时处理来自多线程的 push_back 吗?

C++ OpenMP 并行 For 循环 - std::vector 的替代品 [关闭]