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

标签 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(),这是一个大问题。

提前致谢。

最佳答案

一旦pthread_create返回,所有按值传递的内容都将被成功复制,事实上,i的使用在进入pthread_create之前就已经被评估了。 功能根本没有。对于 void* 参数,指针本身也是按值传递的。

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

关于c - pthread_create() 中是否存在潜在的竞争条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4122893/

相关文章:

使用 pthreads 在多线程代码中计数器值意外更改

c - 这是用两个线程初始化信号量的正确方法吗

multithreading - 有什么方法可以在不创建伪造的 NSThread 的情况下进入 Cocoa 多线程模式?

go - 同时,如何管理值/状态并避免竞争条件

go - 如何以编程方式证明此代码具有竞争条件?

c - Scanf 程序访问被拒绝

C: printf 不打印用户输入的答案

c++ - 操作 Windows 注册表

c++ - Qt 原始类型,与 QTimer 和 C++ 竞赛

c - 为什么我收到编译错误 "error: conflicting types for ‘ptr’“以下代码? static int val=33; int *ptr;//=&val; ptr=&val;