我正在尝试创建线程并将 for 循环中的值传递给每个线程。这是代码段
pthread_t *threadIDs;
int i = 0;
if(impl == 1)
{
threadIDs = (pthread_t *)malloc(sizeof(pthread_t)*reduces);
for(;i < reduces; i++)
{
pthread_create(&threadIDs[i], NULL, reduce,&i);
}
}
它没有传递正确的循环值,这是有道理的,因为我正在创建竞争条件。从我的循环中传递 i 的正确值的最简单方法是什么?
另外一个问题,每个线程会不会在下一个线程创建调用之前执行完?
最佳答案
您已经动态创建了一个线程 ID 数组。对您要传入的值执行相同的操作。
pthread_t *threadIDs;
int *values;
int i = 0;
if(impl == 1)
{
threadIDs = malloc(sizeof(pthread_t)*reduces);
values = malloc(sizeof(int)*reduces);
for(;i < reduces; i++)
{
values[i] = i;
pthread_create(&threadIDs[i], NULL, reduce, &values[i]);
}
}
每个线程将使用不同的数组成员,因此不存在竞争条件。
关于c - 从 for 循环中向线程传递一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52712559/