假设有 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++。当我从监视器线程访问数组内容时,我不关心数组内容的同步/有效性。让我们远离锁定的讨论
最佳答案
如果您确实对性能差异感兴趣,则必须进行测量。我猜想,几乎没有区别。
只要监视器线程不访问因函数返回而无效的堆栈局部变量,这两种方法都是正确的。
关于c++ - 在 C++ 多线程程序中使用指向局部变量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011016/