C++ Vector 是线程安全的吗?多线程

标签 c++ multithreading vector thread-safety

所以我有多个线程访问这个函数来检索数据库信息,它是线程安全的吗?

vector<vector<string> > Database::query(const char* query)
{
    pthread_rwlock_wrlock(&mylock); //Write-lock
    ...
    vector<vector<string> > results;
    results.push...
    pthread_rwlock_unlock(&mylock); //Write-lock

    return results;
}

对于编辑器 -> 有时“修复”>> 到 >> 不是一个好主意,但感谢您的休息。

最佳答案

因为 results 是一个局部变量,它本身在没有锁的情况下使用是安全的,因为每个线程都有一个唯一的拷贝(它在堆栈上, vector 的内容动态分配以某种方式等)。所以只要你的数据库是线程安全的,你就根本不需要任何锁。如果数据库不是线程安全的,你当然需要保护它。

如另一个答案所述,如果出于某种原因,例如字符串的创建导致 throw bad_alloc;,您需要处理它的后果,并确保锁被解锁(除非你真的想死锁所有其他线程!)

关于C++ Vector 是线程安全的吗?多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16877953/

相关文章:

c++ - 如何在多重继承中实现同名虚函数

c++ - 在 dos 批处理文件中关闭屏幕更新

c# - 超时模式——Thread.Abort 到底有多糟糕?

vector - Photoshop 自定义形状到 SVG 路径字符串

C++隐藏继承类?

c++ - 如何配置 apache2 和 fastCGI 来运行我的 C++ 应用程序

java - 多个线程不能同时工作

windows - Boost.test 和对 Boost.thread 的依赖?

C++ 三维 vector ?

c++ - 为什么 llvm::SmallVector 拆分它的存储?