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

标签 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++。当我从监视器线程访问数组内容时,我不关心数组内容的同步/有效性。让我们远离锁定的讨论

最佳答案

如果您确实对性能差异感兴趣,则必须进行测量。我猜想,几乎没有区别。

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

关于c++ - 在 C++ 多线程程序中使用指向局部变量的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22011016/

相关文章:

c++ - 程序员何时使用空基优化 (EBO)

检查用户输入的数字

c - 回文测试

Cygwin 显示错误 iostream.h 无法定位

java - Android:线程完成后使用 setContentView()

c++ - 将用户名和密码传递给 CryptRetrieveTimeStamp 函数

c++ - 为什么我的 DLL 不需要 DllMain 函数?

c++ - 从成员函数指针类型生成仿函数

java - 我需要为此使用线程吗?

c - 在多线程环境中使用 __sync_bool_compare_and_swap 是否正确?