繁体   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