簡體   English   中英

旋轉等待C ++ 11

[英]Spin wait C++11

我有以下結構

struct info {
 unsigned long a;
 unsigned long b;
};

atomic <info> data;

由作者線程和讀者線程使用。 讀者必須盡快響應新值。 為此,我在讀者中實現了以下內容:

while (true) {
  auto value = data.load();
  // do some operations given these new values
}

此操作非常耗費處理器資源。 我之所以選擇這種方法,是因為我認為它比例如使用條件變量然后等待數據更改時喚醒閱讀器線程要快。 而且,數據更新非常頻繁,每秒數百次。 有沒有更好的方法來做到這一點,同時仍具有最快的反應時間?

信號量確實是使寫入器發出新數據信號的好選擇,而讀取器則在准備好使用數據時會醒來。 但是,對於高性能場景,您應該考慮使用無鎖隊列,例如Moody Camel編寫的隊列。 這樣的隊列使編寫者可以添加新的數據條目而不會阻塞讀取器,並且讀取器可以在不阻塞寫入器的情況下盡可能快地獲取數據。 這樣,如果可用的話,數據就可以以最快的速度處理,否則就不消耗CPU資源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM