在C ++中使用多线程程序中的局部变量指针

时间:2014-02-25 10:15:35

标签: c++ c multithreading

假设有4个消费者线程在循环中连续运行

function consumerLoop(threadIndex)
{
    int myArray[100];

    main loop {
    ..process data..
    myArray[myIndex] += newValue
    }
}

我有另一个监视器线程执行其他后台任务。 我需要从监视器线程中访问每个线程的myArray

假设循环将永远运行(因此局部变量将存在),并且监视器线程所需的唯一操作是读取所有线程的数组内容。

另一种方法是将myArray更改为全局数组。但我猜这会减慢消费者循环。

声明全局指针数组有什么不良影响 int *p[4];并通过在consumerLoop中添加一行,如p[threadIndex] = myArray并从监视器线程访问p,将每个元素分配给局部变量的地址?

注意:我在linux系统中运行它,语言是C ++。当我从监视器线程访问它时,我不关心数组内容的同步/有效性。让我们远离关于锁定的讨论

2 个答案:

答案 0 :(得分:1)

如果您真的对性能差异感兴趣,那么您必须进行衡量。我猜,几乎没有区别。

两种方法都是正确的,只要监视器线程不访问由于函数返回而无效的堆栈局部变量。

答案 1 :(得分:-2)

您无法从不同的线程访问myArray,因为它是局部变量。 你可以做1)使用glibal变量或2)Malloca并将地址传递给所有线程。 当所有线程急于使用公共内存时,请保护关键部分。