假设有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 ++。当我从监视器线程访问它时,我不关心数组内容的同步/有效性。让我们远离关于锁定的讨论
答案 0 :(得分:1)
如果您真的对性能差异感兴趣,那么您必须进行衡量。我猜,几乎没有区别。
两种方法都是正确的,只要监视器线程不访问由于函数返回而无效的堆栈局部变量。
答案 1 :(得分:-2)
您无法从不同的线程访问myArray,因为它是局部变量。 你可以做1)使用glibal变量或2)Malloca并将地址传递给所有线程。 当所有线程急于使用公共内存时,请保护关键部分。