等待线程创建

时间:2016-03-21 12:26:54

标签: c multithreading

有没有办法确保在转移到其他指令之前创建了一个线程(不使用诸如sleep()之类的绕道)?

我有一个看起来像这样的循环:

for(i = 0; i < NUM_THREADS; ++i)
{
    if(pthread_create(&threads_id_array[i], NULL, ThreadFunction, &args))
    {
        perror("pthread_create() error");
        exit(1);
    }
    args.base += args.offset;   
}

其中base是指向数组的指针。我想确保在base升级之前创建了一个线程,以便我可以确保线程的args.base保持正确的值。目前,这会导致错误。

2 个答案:

答案 0 :(得分:0)

如果您这样做是为了加快一些CPU限制工作,请考虑使用OpenMP而不是pthreads。

像这样:

#pragma omp parallel for
for(i = 0; i < NUM_THREADS; i++)
{
    auto threadArgs = args;
    threadArgs.base += i * threadArgs.offset;
    ThreadFunction( &threadArgs );
}

答案 1 :(得分:0)

除了@Soonts的答案和@Martin James评论之外,这里还有另一个选项的片段 - 即使用结构数组,并为每个线程发送相应的索引:

char *base_ptr =  base;
args_t args_array[NUM_THREADS];

for(i = 0; i < NUM_THREADS; ++i)
{
    args_array[i].base = base_ptr;  
    base_ptr += args_array[i].offset;
}

for(i = 0; i < NUM_THREADS; ++i)
{   
    if(pthread_create(&threads_id_array[i], NULL, ThreadFunction, &args_array[i]))
    {
        perror("pthread_create() error");
        exit(1);
    }
}