在系统调用中使用共享内存shmget()
,我的 C++ 程序的目的是通过一个用 Rust 编写的服务器从 Internet 获取投标价格,这样每次价值变化时,我都在执行金融交易。
服务器伪代码
Shared_struct.price = new_price
客户端伪代码
Infinite_loop_label:
Wait until memory address pointed by Shared_struct.price changes.
Launch_transaction(Shared_struct.price*1.13)
Goto Infinite_loop
由于启动交易涉及支付交易费用,我只想在每次购买价格变化时创建一次交易。
使用信号量或 futex,我可以做相反的事情,我的意思是等待变量达到特定值,但是如何等到变量不再等于当前值?
而在 Windows 上,我可以对共享段的地址执行以下操作:
ULONG g_TargetValue; // global, accessible to all process
ULONG CapturedValue;
ULONG UndesiredValue;
UndesiredValue = 0;
CapturedValue = g_TargetValue;
while (CapturedValue == UndesiredValue) {
WaitOnAddress(&g_TargetValue, &UndesiredValue, sizeof(ULONG), INFINITE);
CapturedValue = g_TargetValue;
}
有没有办法在 Linux 上做到这一点?还是直接等效?