您使用什么日志工具?Qt?
你选择qDebug(),qWarning(),qCritical(),qFatal()方法,还是像Log4cpp(Log4cplus等),或者一些自定义代码?
Qt文档说明了线程安全性和重入性:
注意:如果Qt类打算由多个线程使用,则它们仅记录为线程安全的.如果函数未标记为线程安全或可重入,则不应在不同的线程中使用它.如果某个类未标记为线程安全或可重入,则不应从不同的线程访问该类的特定实例.
这似乎表明Qt中的每个函数和类都应该被认为是非重入和非线程安全的,除非明确说明.
但是,在文档中,QRect并且QPoint,例如,既没有提到线程安全性也没有提及重入性,但我发现很难相信它们不是.事实上,这个旧的讨论说它在文档中"缺乏":
这些类只是普通数据(一些原语),没有共享的结构化或静态数据,因此它们是可重入的.它们没有标记,我们的文档缺乏.
那么,我们应该如何知道某个函数是否可以重入?重入笔记是否仅为简单类省略,其显而易见性暗示了它?
似乎glibc的fprintf()实现是线程安全的,但对于微软的CRT来说也是如此吗?
通过线程安全,我并不仅仅意味着崩溃,而且如果多个线程(在同一个进程中)调用fprintf(),文本将不会混合.
也就是说,例如,如果线程A调用fprintf(stdout, "aaaa");并且线程B调用fprintf(stdout, "bbbb");它,则保证不会混合成为aabbaabb.
有这样的保证吗?