使用std :: thread在C ++中进行线程化

时间:2017-06-10 01:40:25

标签: c++ multithreading cpu

我想知道我是否初始化了四个std :: thread,这会使双线程cpu崩溃,还是std :: thread的虚拟线程。

我主要想知道因为我正在为课程编写的程序使用四个线程会更快,但我不知道我的分级器在他们的CPU上有多少线程。我有8个,但她很容易就有2个。我不想让她的系统崩溃,所以任何帮助都是

我是计算机科学的新手,所以我欢迎任何帮助。

2 个答案:

答案 0 :(得分:2)

线程数不必限于核心数。操作系统只会在核心可用时安排线程。

也就是说,您可以使用{{1}}查找可用的核心/处理器数量,并根据您使用的线程数量。

答案 1 :(得分:0)

  

...如果我初始化了四个std :: thread,那么这会导致双线程崩溃   CPU

我怀疑你是在询问线程与核心......线程是独立于核心的。单核cpu可以运行多个线程。

  • N个线程,其中N>核心计数,不会崩溃Linux系统。

Linux提供了一个特殊文件。我在我的C ++程序中使用本地版本的grep来读取和计算这个特殊文件中有多少行包含字符串“processor”。

//       The special file of Ubuntu -- vvvvvvvvvvvvv
size_t retVal = DTB::grep(std::string("/proc/cpuinfo"),
                          std::string("processor"),  // line count of "processor" is core count
                         nullDev); // dev/null -- no output

此调用返回处理器的数量。我的老戴尔有2个。

该文件的前几行如下:

$ cat /proc/cpuinfo
processor   : 0
vendor_id   : AuthenticAMD
cpu family  : 15
model       : 75
model name  : AMD Athlon(tm) 64 X2 Dual Core Processor 5000+
stepping    : 2
cpu MHz     : 1000.000
cache size  : 512 KB

命令顶部显示我有>状态正在运行或睡眠的178个任务,超过2个。

  

使用四个线程会更快,

我怀疑它会,但这不能保证。这是开发人员必须执行的另一项测试,以确认您的猜测。当线程相互交互时(信号量?消息传递?),你(或我)越来越不可能预测结果。

  

所以不值得让它成为四线程的吗?

我认为你应该在你的机器上测量两种形式的代码的性能。如果4个线程更快,那么另一台机器速度慢并不是你的错。

我建议计划录制持续时间......也许将其作为输出的一部分。