【发布时间】:2021-08-21 16:53:29
【问题描述】:
我在 C 中有这段代码:
int X=0;
void main()
{
X++;
}
如何让我的 CPU 在不同内核上几乎同时运行两次此代码(我并不是要求 100% 的成功率来实现这种情况)?
也许线程可以在这里提供帮助?
我想在我眼里看到运行代码后X可能是1而不是2。
如果重要的话,我的内核是非抢占式的 (linux 2.4)。
【问题讨论】:
-
如果您想完全控制哪些内核运行在哪些内核上,您可能需要查看CUDA 之类的内容。如果您只想要两个线程并让操作系统按照它认为合适的方式安排它们,那么只需使用.. 线程。
pthreads库是 Linux 的标准 -
简而言之,你不能,因为你没有细粒度的控制什么时候运行。因此,即使启动两个线程递增该整数,也不太可能得到除 2 以外的其他结果。但是,如果您想证明在没有同步的情况下递增 int 是不可靠的,我建议重复此操作。例如,运行四个线程,每个线程将 var 递增 1M 倍。通过这种设置,除非使用智能编译器,否则我可以想象实际看到这种竞争条件。
-
@EugeneSh。好吧,让我们让事情变得更简单,我想要一些可能导致我上面描述的场景的代码(不一定是 100%,但即使是 5% 也足够了)
-
@UlrichEckhardt 请阅读我的最后一条评论,并非所有运行都必须如此,但理论上支持这种行为。如果从 1000 次运行中只发生一次,这对我来说就足够了。
-
XY 问题?为什么你关心核心,或者几乎同时发生的事情(以及“几乎”的定义是什么)?
标签: c linux multithreading fork cpu