gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:54:44 26 4
gpt4 key购买 nike

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

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/

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