【发布时间】:2014-04-26 23:03:18
【问题描述】:
qDebug() 线程安全吗?我所说的线程安全不仅仅是指不崩溃,而且如果我从不同的线程调用qDebug(),输出是否可能会混淆?我用这段代码对其进行了测试,但似乎并非如此,但是,我在他们谈论这个的文档中找不到任何地方。
这是我的测试代码:
#include <QtConcurrent>
#include <QApplication>
void print_a() {
for (int ii = 0; ii < 10000; ii++) {
qDebug("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}
void print_b()
{
for (int ii = 0; ii < 10000; ii++) {
qDebug("bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb");
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QtConcurrent::run(print_a);
QtConcurrent::run(print_b);
return a.exec();
}
在任何地方没有'a'和'b'混合在同一行,但我仍然不确定它是否 100% 线程安全...
【问题讨论】:
-
文档说If a function is not marked as thread-safe or reentrant, it should not be used from different threads。在
qDebug()的情况下,它并没有说它是线程安全的,所以从不同的线程中使用它可能不安全。 -
@thuga 这是对我问题的有效答案,那么,您应该发布它:)
-
我发表了我的评论作为答案。
标签: c++ multithreading qt qdebug