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

Threading in C++ using std::thread

我想知道如果我初始化四个 std::thread ,这会导致双线程 cpu 崩溃还是 std::thread 是虚拟线程之类的东西。

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

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

线程数不必受内核数限制。 OS 只会在内核可用时安排线程。

就是说,您可以使用 hardware_concurrency() 来确定有多少 cores/processors 可用,并以此为基础确定您使用的线程数。

... if I initialize four std::thread 's, will this crash a dual 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

这次调用 returns 处理器的计数。我的旧戴尔有 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

命令 top 显示我有 > 178 个任务处于 运行宁或睡眠状态,比 2 个多很多。


would go much faster with four threads,

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


So its not worth it to make it quad threaded?

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

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