c - 从 for 循环中向线程传递一个值

标签 c multithreading loops

我正在尝试创建线程并将 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/

相关文章:

c - 解释指针问题的指针

c - 计算 ((2^n )-1)mod p 的最佳方法

c - 动态内存分配和指针?

multithreading - POSIX 系统上的僵尸线程

ios - 返回值时 iOS 中的线程问题

django - Django 模板中的嵌套循环

python - 如何计算以字符串开头的单词数

c - 如何使用const成员操作结构数组

java - 如何使状态变量线程安全

r - 将数据分成三组并平衡数据