我有以下结构
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资源。