![](/img/trans.png)
[英]testing “cache not flushed to main memory” for my ring-buffer implementation
[英]device driver memory buffer processor cache issue
我有一台使用USB中的两个不同的批量通道发送图像数据和视频帧的设备。
我的工作站处理器高速缓存有点大,足以容纳大约100个视频帧,但没有图像数据。
我对图像和视频数据使用相同的缓冲区,该缓冲区大约有50个块,一个块的大小为1MB。 视频帧很快出现,然后是图像帧。
我的问题是,在以下secnario中是否存在内存损坏问题? 知道处理器高速缓存的人可以为我提供帮助。
volatile
。 这会发生吗? 因此,我也将volatile
应用于视频数据写入,这个问题似乎消失了。 但是我需要报告,因此上述情况有可能发生吗?
注释是赠品:两个线程和volatile
被滥用为线程机制。
两个线程可以在两个CPU内核上运行。 尽管内核通常共享内存,但它们通常不共享L1缓存。 中间缓存有所不同。 结果,在两个CPU内核上取消引用相同的指针可能会得出不同的结果。 对于在线程之间正确共享的变量来说,这不是问题。 编译器将使用正确的指令。 但是该关键字已正确共享。
在这里,我们遇到了一个小问题,您已经将问题标记为C和C ++,因为在线程标准化之前,这两种语言都以这两种语言进行了标准化。 但是,这两种线程机制故意相似,因此编译器对可以(作为扩展)定义C线程和C ++线程如何交互。 您需要为此查阅文档。
将libusb
线程包装在您自己的代码中可能会更容易,这样您就可以在没有线程问题的情况下接收数据,然后将代码从代码分派到同样受您控制的其他线程。
回到您看到的内存损坏:您可能看到的是,一个线程正在写出其内存视图,事实证明这是其缓存中的陈旧数据。 如果您使用了互斥锁之类的东西,那么这些过时的数据将被记录下来并缓存同步。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.