QThread是在用户级别,内核级别还是两者都有?

时间:2011-03-27 09:30:02

标签: c++ multithreading qt cross-platform multicore

我正在为多核机器编写可移植代码,我想要内核级线程,因此线程可以使用多个cpu。在阅读Qt助手的QThread文档后,我仍然没有找到任何提示。

在Windows XP上,来自QtSDK的多线程示例(mandelbrot)只使用了一个核心。所以我想在XP上只有用户级线程是可能的。到目前为止,我还没有在Linux或OSX上测试过,因为没有安装完整的SDK。 编辑:SDK中给出的示例是愚蠢的 - 它只使用一个线程进行这些计算,因此仅绑定到一个核心是误导性的。自己构建一个样本我可以使用所有内核,所以在XP上使用mingw / GCC Qt使用内核级线程。

那么,QThread使用了哪种线程?是否可以指定使用哪种线程?

多个进程也可以与共享内存结合使用。

修改

http://doc.qt.io/qt-4.8/thread-basics.html给出了很好的介绍。

2 个答案:

答案 0 :(得分:3)

我不了解Windows,但在Unix上它使用的是pthreads。 QT没有为CPU亲和力公开API,因为它需要独立于平台和硬件。跨CPU的QThread分配留给操作系统调度程序,你不能通过某些QT API提示它。

答案 1 :(得分:3)

来自QThread Class Reference

  

QThread表示程序中单独的控制线程;它与流程中的所有其他线程共享数据,但以独立程序在多任务操作系统上的方式独立执行

用你的术语来说,它是一个“内核”线程。

此外,Windows XP上“只有用户级线程可能”的结论肯定是不正确的。