代码之家  ›  专栏  ›  技术社区  ›  LLS

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

  •  1
  • LLS  · 技术社区  · 14 年前

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

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

    提前谢谢。

    1 回复  |  直到 14 年前
        1
  •  3
  •   Flexo - Save the data dump sunny moon    6 年前

    一次 pthread_create 返回通过值传递的所有内容都将被成功复制,实际上 i 创建线程 完全发挥作用。对于void*参数,指针本身也是按值传递的。

    通过引用(或指针)本身,并使用它访问开始例程中的数组。但在本例中并非如此。