相关疑难解决方法(0)

qDebug()线程安全吗?

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();
}
Run Code Online (Sandbox Code Playgroud)

任何地方没有'a'和'b'混合在同一行,但我仍然不确定它是否100%线程安全......

c++ qt multithreading qdebug

25
推荐指数
4
解决办法
5176
查看次数

glibc是否实现了fprintf()线程安全?

fprintf是线程安全的吗? glibc手册似乎说它是,但我的应用程序,使用单个调用fprintf()写入文件似乎是混合来自不同进程的部分写入.

编辑:为了澄清,有问题的程序是一个lighttpd插件,服务器正在运行多个工作线程.

查看该文件,一些写入混合在一起.

编辑2:我看到的问题似乎可能是由于lighttpd的"工作线程"实际上是单独的进程: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor

问题

通过在同一个套接字上运行2个或更多进程,您将获得更好的并发性,但是您必须注意一些缺点:

  • mod_accesslog可能会创建损坏的访问日志,因为同一个文件打开两次并且未同步.
  • mod_status将有n个独立的计数器,每个进程一个.
  • mod_rrdtool将失败,因为它收到两次相同的时间戳.
  • mod_uploadprogress将不会显示正确的状态.

c printf multithreading posix lighttpd

8
推荐指数
2
解决办法
1万
查看次数

fprintf()线程安全吗?

我正在为就餐野人问题的某些变量编写C解决方案。现在,我创建线程,每个线程都将FILE *发送到相同的调试文件。在线程内部,我正在使用fprintf()进行一些打印。打印的报表不受任何互斥量等的保护。

我在调试文件中没有观察到任何交错行为;似乎它是线程安全的,尽管我在网上找不到无处不在的明确声明。

我看到的是以下内容:

  1. 在Unix中fprintf是线程安全的
  2. 使用c ++ 11编译器fprintf需要线程安全

我之所以这样问,是因为这是一项可以完成的大学作业,但是我仍然怀疑在另一台基于Windows的计算机中,由于上述不确定性,该程序可能会引起问题。

我将附加线程代码,因此您将看到prinintg没有受到保护:

    DWORD WINAPI RoomateThread(LPVOID lpParam) {
    /*=================================================
    "RoomateThread" this is the roomate thread handler function where
    the thread logic is implemented
    Input:  1. lpParam holds a roomate, runtime and pointers to both files
    Output: 1. return an DWORD value {0}->Success {-1}->Failure
            2. A code telling if the run was successful (debug file)
    A roommate follows this logic after wake up:
        1. If there are clothes available in …
Run Code Online (Sandbox Code Playgroud)

c windows multithreading

6
推荐指数
1
解决办法
1855
查看次数

标签 统计

multithreading ×3

c ×2

c++ ×1

lighttpd ×1

posix ×1

printf ×1

qdebug ×1

qt ×1

windows ×1