c++ - pthreads - 先前创建的线程使用新值(线程创建后更新)

标签 c++ pthreads

这是我的场景。首先,我有一个结构——

struct interval
{
    double lower; 
    double higher;
}

现在我的线程函数 -

void* thread_function(void* i)
{
    interval* in = (interval*)i; 
    double a = in->lower; 
    cout << a; 
    pthread_exit(NULL)
}

在 main 中,假设我创建了这 2 个线程 -

pthread_t one,two; 
interval i; 

i.lower = 0; i.higher = 5; 
pthread_create(&one,NULL,thread_function,&i);

i.lower=10; i.higher = 20; 
pthread_create(&two,NULL,thread_function, &i); 

pthread_join(one,NULL);
pthread_join(two,NULL);

问题来了。理想情况下,线程“一”应该打印出 0,线程“二”应该打印出 10。然而,这并没有发生。有时,我最终会得到两个 10。

这是设计使然吗?换句话说,在创建线程时,i.lower 中的值已经在 main 中更改,因此两个线程最终使用相同的值?

最佳答案

Is this by design?

是的。线程何时开始以及它们何时访问该值是未指定的。您需要给他们每个人自己的数据拷贝。

关于c++ - pthreads - 先前创建的线程使用新值(线程创建后更新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3758561/

相关文章:

c++ - 无需单例即可将 QML 与 C++ 连接

c++ - 使用线程生成唯一随机数

c - 如何通过C中的结构传递矩阵的地址?

c - 线程数组中的第一个线程在 c 中被跳过(有时)?

c++ - 为什么我得到不同的输出?我正在使用有界缓冲区、pthreads 和信号量使用 c++ 进行编码

c++ - C++11 线程如何包裹 pthreads

c++ - native VC++ 使用外部(非项目)dll 引用如何指定 dll 的路径

c++ - 全局函数识别失败

c++ - 如何新建一个 string[] ?

c++ - 遍历特定部分中的所有符号并获取它们的签名