gpt4 book ai didi

c - pthreads create_pthread() 传递多个参数

转载 作者:太空宇宙 更新时间:2023-11-04 07:16:49 26 4
gpt4 key购买 nike

我正在学习有关 pthreads 的教程:

https://computing.llnl.gov/tutorials/pthreads/#Abstract

还有这个通过结构传递多个参数的例子:

struct thread_data{
int thread_id;
int sum;
char *message;
};

struct thread_data thread_data_array[NUM_THREADS];

int main (int argc, char *argv[])
{
...
thread_data_array[t].thread_id = t;
thread_data_array[t].sum = sum;
thread_data_array[t].message = messages[t];
rc = pthread_create(&threads[t], NULL, PrintHello, (void *) &thread_data_array[t]);
...
}

这个例子展示了如何传递单个参数:

int rc;
long t;

for(t=0; t<NUM_THREADS; t++)
{
printf("Creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *) &t);
...
}

我不明白为什么最后一个场景是错误的,因为它传递了t的地址。然而,第一个场景不是传递了 thread_data 结构的地址吗?

最佳答案

在第二个例子中,t 是局部变量,它的值是不断变化的。一些问题是

  • 如果您传递 t 的地址,此函数终止后该地址可能无效。
  • 当您传递 t 的地址时,每个线程将获得相同的地址,并将尝试访问/修改相同的变量,从而导致竞争条件。
  • 由于 t 在循环中发生变化,并且您正在传递地址,同一线程将看到不同的 t 值。

在第一种情况下,您正在为传递给线程的数组中的每个线程创建单独的元素。并且它在函数外声明,因此大部分将是全局的。

关于c - pthreads create_pthread() 传递多个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23951742/

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