![](/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.