c++11 在不同类之间共享固定大小的数组

标签 c++ multithreading c++11

我正在处理分为两部分(线程)的实时应用程序:

  • 处理
  • 图形

处理的输出是一个固定大小的数组(float),为了保持实时性能,我想将此类数据发送到另一个线程,该线程将绘制,例如图形,在自己的节奏。
我研究过 atomiclock 但我不知道如何使应用程序线程安全,因为这两个进程是完全独立的。

示例代码:

class A {
    float data[n];
    processData() {
        data = ... ;
    }
}

class B {
    void draw() {
        // requires data[] from class A
    }
}

这两个类都在主线程中初始化,我试图在那里定义一个 float* 指针并将其传递给其他两个线程,处理将其分配给 data[] 图形可以读取,但是一个读取另一个修改的时候明显出错。

最佳答案

您可以为图形输出和互斥锁创建浮点值队列。

每当处理生成一些输出时,锁定公共(public)互斥锁,将数据附加到队列,解锁互斥锁。

另一方面,定期从图形线程锁定互斥锁,查看是否有新数据要显示,如果有则从队列中移除该数据,临时将其复制到线程本地数据缓冲区以确保图形输出时不锁定互斥量,复制数据后立即解锁互斥量。然后使用本地拷贝在该线程中显示图形。

关于c++11 在不同类之间共享固定大小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46892172/

相关文章:

c++ - 模板元编程,带有可变参数模板 : compiler error

c++ - 字段类型不完整?

c++ - 在 C++ 中将指针数组分配给私有(private)变量

java - 使用 Java 在线程之间传输数据

java - 了解java的 native 线程和jvm

c++ - 在 size_t 中使用负整数是否安全?

c++ - 无法弄清楚在函数之后类中没有正确的变量值有什么问题等等

c++ - std::map:使用键类以外的参数重载 operator<

c++ - 模式功能: How does it work?

ios - 来自多个类和线程的异步核心数据