【发布时间】:2019-08-10 21:47:04
【问题描述】:
我用代码块写了一个程序,代码如下所示。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int Param, i, j, k;
if(argc != 2){
fprintf(stderr, "An integer parameter is required \n");
return -1;
}
Param = atoi(argv[1]);
if(Param<0){
fprintf(stderr, "An integer >= 0 is required \n");
}
printf("first \n");
for(i = 0; i < 1500; i++)
for(j = 0; j < 1500; j++)
for(k = 0; k < 1500; k++);
printf("second \n");
for(i = 0; i < 1500; i++)
for(j = 0; j < 1500; j++)
for(k = 0; k < 1500; k++);
printf("Done \n");
return 0;
}
在程序中,我没有使用任何多线程函数和库,如 windows.h 或 thread.h。但是当我打开任务管理器观察它使用的线程时,我很惊讶程序使用了 2 个线程。我不知道为什么会发生这种情况。在编译器编译我的程序时,我编写的程序中是否添加了一些东西? 请帮助我找出其中的奥秘。
这是关于问题的图片。
【问题讨论】:
-
您似乎有多个
single-thread.exe程序,其中一些似乎创建了线程(尽管可执行程序的名称)。您确定它不是仍在运行的其中之一吗? -
我只有一个叫做single-thread.exe的程序,而且我确信只有一个程序同时调用single-thread.exe。
-
如果我使用 visualstudio ,线程将变为 4 个线程。很奇怪。
-
当您运行调试构建时,可能会发生比您编写的代码更多的事情。例如,程序可能正在与您的 IDE 通信以帮助您进行调试(因此您可以检查值、查看崩溃的位置等)。这些东西可能在它们自己的线程中运行,并构成了小程序的大部分内存使用。别担心。
-
您使用的是 Win10,适合现代操作系统,它确实利用了您的机器具有多个处理器内核。他们可以更快地启动您的程序。详情are here.
标签: c windows multithreading