我现在正在编写一个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(),这是一个大问题。
提前致谢。
最佳答案
一旦pthread_create
返回,所有按值传递的内容都将被成功复制,事实上,i
的使用在进入pthread_create之前就已经被评估了。
功能根本没有。对于 void* 参数,指针本身也是按值传递的。
例如,如果您通过引用(或指针)传递 i 本身并使用它来访问启动例程内的数组,则存在创建竞争条件的可能性。但本例中的情况并非如此。
关于c - pthread_create() 中是否存在潜在的竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122893/