如何 运行 相同的代码使用线程两次?
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
但我不确定,否则请详细说明。
我在 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
但我不确定,否则请详细说明。