如何 运行 相同的代码使用线程两次?

How To Run Same Code Twice Using Threads?

我在 C:

中有这段代码
int X=0;

void main()
{
    X++;
}

如何让我的 CPU 运行 这段代码几乎同时在 不同的 内核上运行两次(我不是要求 100% 的成功率这种情况会发生)?

也许线程可以提供帮助?


我想在我眼中看到 运行ning 后代码 X 可能是 1 而不是 2。

如果这很重要,我的内核是非抢占式的(linux 2.4)。

您好,欢迎来到 Whosebug。你的程序可以像

一样简单
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

int x;

void func(void*) {
    x++;
    printf("x: %d\n", x);
}

int main() {
    pthread_t thread1;
    if (pthread_create(&thread1, NULL, &func, NULL)) {
        perror("Thread creation failed");
    };

    func(NULL);
    pthread_join(thread1, NULL);
}

然而你将得到的是所谓的data race or race condition

如果你真的只想同时计算一些东西,那么原子可能就是你需要的:

#include <stdatomic.h>

atomic_int x;

void func(void*) {
    atomic_fetch_add(&x,1);
    printf("x: %d\n", atomic_load(&x));
}

此外,这个默认线程应该仍然适用,您可以使用 pthread_attr_setschedpolicy 但我不确定,否则请详细说明。