如何在 Erlang 中同步多个进程?

How can I synchronize multiple processes in Erlang?

我正在考虑在 Erlang 中实现一个 GPS+I2C 惯性测量系统 (IMU)。 我想开始从一组基于 GPS 1PPS 机制的 I2C 从设备中获取多个样本,以便同时测量所有内容。

由于 Erlang 使用消息队列来接收消息,我该怎么做才能确保 GPS 和 I2C 传感器之间的同步?我可以在不失去同步性的情况下在不同的进程中处理这两个问题吗?

How can I synchronize multiple processes in Erlang?

receive
    {Pid1, Data} -> do_something
end,
receive
    {Pid2, Data} -> do_something
end
receive
    {Pid3, Data} -> do_something
end,
...

第一个接收将阻塞,直到来自 pid Pid1 的进程的数据发送消息。如果Pid1进程执行时间最长,那么后面的receives都会立即执行。如果 Pid1 进程花费最少的时间执行,则至少有一个后续接收将阻塞。

总体结果是,所有接收都将在最长进程完成并发送消息所需的时间内执行。