关于QMap线程安全的问题
Qt: Questions about QMap thread-safety
我在Windows 7上使用的是Qt5。
在我目前的应用程序中,我有以下内容(在这里简化):
QMap<int, QString> map;
int _WorkerThread_(int index)
{
QString new_element = "whatever";
...
map.insert(index, new_element); // [Q1]
...
}
int _MainThread_()
{
int i;
...
i = some_value();
map.remove(i); // [Q2]
...
}
我有2个问题关于上面的代码和相关的QMap
线程安全(我没有在Qt文档中找到很多关于它的信息):
1)当同时启动多个_WorkerThread_
线程时,map.insert(..)
- (参见代码行标记[Q1])是否可以像上面那样安全使用?
2)从QMap
中删除一个元素是多么安全/线程安全- 参见代码行标记[Q2] -当(以某种方式)保证i
的值不在工作线程当前使用的索引中?
[编辑]:
你是说我应该用互斥锁还是怎么的?
QMap 不是线程安全的,, 凹。
要回答您的编辑,您可以使用Qt提供的工具,如类(例如:QMutex)或基本函数(例如:QCoreApplication::postEvent())
有关更多信息,请参阅Qt解释:http://doc.qt.io/qt-4.8/threads-reentrancy.html
希望有帮助!
相关文章:
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- 使用安全零内存新建/删除时出现问题
- 在C++中,这个Eigen::张量的声明是安全的,还是有缺陷的?我应该为它提交一个问题吗
- 编译器优化是否解决了线程安全问题
- CreateProcess API的安全问题
- GSL螺纹安全问题
- 为什么我们需要 RAII 来解决异常安全问题
- 关于 swap() 操作的异常安全 - 这有什么问题?
- 此 strncpy 存在哪些安全问题
- 在机器上运行时,编译的源代码(C++、Java 等)涉及哪些安全问题
- 创建表示安全ORrable标志的类时出现问题
- 实现应用程序网络协议的安全问题
- 使用"for(auto&e : cont)"安全吗?矢量有什么问题<bool>?
- C++常见问题解答的不安全宏的解释?
- 在线编译c/c++[安全问题]
- 创建读取面向互联网的套接字的守护进程有什么安全问题?
- 线程安全问题
- 关于QMap线程安全的问题
- c++系统调用安全问题
- 我的简单线程安全堆栈有什么问题?