gpt4 book ai didi

c - 访问C数组线程中的不同元素是否安全?

转载 作者:行者123 更新时间:2023-12-03 13:16:36 25 4
gpt4 key购买 nike

假设我有以下C代码:

int my_global_arr[100];
或更笼统地说,
some_type *my_global_arr = malloc(some_size * sizeof(some_type);
在多个线程中同时访问(读和写)不同元素是否安全?
例如,如果我有
void *my_thread(void *index){
int idx = *((int *)(index));
my_global_arr[idx] = idx;
return NULL;
}
并在 main()
int a = 1;
int b = 2;
pthread_t thread1, thread2;
pthread_create(&thread1, NULL, my_thread, &a);
pthread_create(&thread2, NULL, my_thread, &b);

pthread_join(thread1, NULL);
pthread_join(thread2, NULL);
是否可以保证两个线程不会互相干扰?
我的实验:
我尝试运行上面的“程序”,在x86_64 CPU上扩展到1000个线程,进行了100000次
在GCC 8.3.0中,-std = c99,看来它们不会互相干扰;
但是,我认为这样的实验不足以得出这样的访问权限是足够的
在所有平台上都是线程安全的。
编辑1 :
这个问题是关于在不同的地方访问 不同的元素
线程,而不是不同线程中的同一元素;那是,
例如, thread-1读取/写入 arr[1]thread-2读取/写入 arr[2]

最佳答案

如果您可以保证一次只让一个线程访问每个元素,那么它是线程安全的。因为数组的每个元素(在物理上)都互不相同,这意味着它们是内存的独立部分。

关于c - 访问C数组线程中的不同元素是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63092262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com