我正在处理分为两部分(线程)的实时应用程序:
- 处理
- 图形
处理的输出是一个固定大小的数组(float
),为了保持实时性能,我想将此类数据发送到另一个线程,该线程将绘制,例如图形,在自己的节奏。
我研究过 atomic
和 lock
但我不知道如何使应用程序线程安全,因为这两个进程是完全独立的。
示例代码:
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/