gpt4 book ai didi

c++ - QThreadPool 是否有序地调度它的线程?

转载 作者:行者123 更新时间:2023-11-28 00:54:59 26 4
gpt4 key购买 nike

在尝试 QThreadPool 之前,我认为多线程程序可能会产生不确定的结果,具体取决于操作系统如何调度它。不过,今天我的看法有点改变。

这是来自 main.cpp 的代码:

runnableInst *hInst = new runnableInst("StarWar");
runnableInst *thread = new runnableInst("BlackSmith");
QThreadPool::globalInstance()->start(hInst);
QThreadPool::globalInstance()->start(thread);

这是运行函数。

void runnableInst::run()
{
// while(1) {
for(int i = 0; i < 50; ++i) {
qDebug()<<"CurrentThread="<< QThread::currentThread();
qDebug()<<threadName + " is outputing. Count="<<i;
Sleep(100);
}
}

这是部分结果。 enter image description here

看来这两个线程是按照加入线程池的先后顺序运行的。这是否意味着我们不会有一个随机线程执行结果与类 QThreadPool?

最佳答案

不,它没有..是的,它有:

线程调度从来都不是随机的——它是由所使用的调度算法和调度程序/调度程序运行时所有线程的状态精确决定的。在很多设计/系统/场景中,它可以出现伪随机,但你的例子不是其中之一

在您的示例中,您的可运行对象执行的实际工作很少,以至于两个池线程只是交替绘制和执行它们。 99.99% 的时间里,两个线程都被阻塞在 sleep(100) 调用上。在那段时间结束时,两个线程都将获得另一个可运行的线程,一个稍微在另一个之前。

您看到的调度行为是示例代码的产物。您不能将其外推到其他设计和/或一般行为。

关于c++ - QThreadPool 是否有序地调度它的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com