无锁实现生产者与消费者线程间市场数据(双精度结构体)安全共享的方案咨询
无锁实现生产者与消费者线程间市场数据(双精度结构体)安全共享的方案咨询
各位好,我目前碰到了一个多线程场景下的共享数据安全问题,想请教下无锁实现的解决方案:
我有一个多线程应用,其中一个生产者线程负责更新多只交易标的的市场数据,同时有多个消费者线程会读取这些数据,根据不同策略计算现货价格,比如:
spot = (bid + ask) / 2spot = bid * bid_qty / ask * ask_qty
我定义的Instrument结构体代码目前是这样的(代码片段有截断,先贴出已有的部分):
#include <iostream> #include <thread> #include <unordered_map> #include <string> // 后续头文件及结构体完整定义被截断,大致会包含bid、ask、bid_qty、ask_qty这类双精度字段 struct Instrument { double bid; double ask; double bid_qty; double ask_qty; // 其他可能的市场数据相关字段 };
现在想请教的是,怎么用无锁的方式实现:当生产者更新Instrument数据时,多个消费者能安全读取到一致的、未被半更新的完整数据?毕竟如果直接裸共享内存,大概率会出现消费者读到"脏数据"的情况——比如生产者刚更新了bid字段,还没来得及更新ask,消费者就读取了数据,最后算出错误的现货价格。
内容来源于stack exchange
相关产品推荐
相关产品推荐

