c++线程划分为微处理器

标签 c++ multithreading visual-c++ thread-safety

我有一个问题...我需要构建一个多线程应用程序,我的问题是:如果我有一个 2cpu 处理器,我的 2 个线程是否会自动按处理器分开? 如果我有 4 个线程并且我的电脑有 4 个 cpu,那么每个处理器又是 1 个吗?如果我有 4 个处理器和 2 个 cpu,如何划分??

提前致谢

最佳答案

除非您至少指定操作系统,否则这不是真正可以回答的问题。

C++ 本身对线程一无所知,它们是操作系统为执行环境提供的服务,并依赖于操作系统的实现。

作为一般观察,我非常确定 Linux 独立调度线程,以便多个线程可以分布在不同的 CPU 和/或内核上。我怀疑 Windows 也会这样做。

某些操作系统将允许您指定线程亲和性,即线程(有时是线程组)坚持使用单个 CPU 的能力,但同样,这是一个操作系统问题,而不是 C++ 问题。

对于 Windows(根据您的评论),您可能需要阅读 this introduction . Windows 提供了一个 SetProcessAffinityMask() 函数来控制给定进程中所有线程的亲和性,或 SetThreadAffinityMask() 来独立控制线程。

但是,通常情况下,您会发现最好不要管这些,让操作系统自行解决 - 除非您对不同的行为有特定需求,否则操作系统几乎肯定会做出正确的决定。

关于c++线程划分为微处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192216/

相关文章:

c++ - 您可以链接使用不同优化级别编译的目标文件吗?

c++ - 迭代器概念弱于相应的命名需求,哪些适用于非范围标准算法?

c++ - 如何有效地查找大型 vector 中的元素

java - C/C++ "system level programmers"的线程问题是否与 Java 程序员面临的问题有很大不同?

windows - 只要线程的任何句柄打开,线程 ID 是否保持唯一/有效?

c++ - 无效使用旧代码 : how should I update it to modern, 中的右值引用正确用法?

ios - UIScrollView 滚动事件阻塞 UIView 动画

c# - C#LazyCache并发字典垃圾回收

c++ - 类 header 定义中的 Decltype 和 auto 是一些可能的特定情况

c++ - OpenCV 将列添加到矩阵