pthread_create()中是否存在潜在的竞争条件?

时间:2010-11-08 10:11:33

标签: c pthreads race-condition

我现在正在写一个pthread程序。根据我在C#中的经历,我认为在创建一个帖子时可能存在竞争条件。

for (i = 0; i < 10; i++)
{
    pthread_create(threads[i], NULL, &do_something, (void*)&data[i]);
}

是否有可能在创建新线程之前更新局部变量i?因此,数组中错误的数据或线程条目可能会传递给do_something函数?至少在C#中,如果我使用Task.Factory.StartNew(),这是一个很大的问题。

提前致谢。

1 个答案:

答案 0 :(得分:3)

一旦pthread_create返回通过值传递的所有内容都将被成功复制,实际上i的使用在完全进入pthread_create函数之前都会被评估。对于void *参数,指针本身也通过值传递。

例如,如果您通过引用(或指针)传递i并使用它来访问启动例程内的数组,则存在创建竞争条件的可能性。但是在这个例子中并非如此。