作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我有多个线程访问这个函数来检索数据库信息,它是线程安全的吗?
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/
我是一名优秀的程序员,十分优秀!