It's been a while but I thought I'd answer for posterity.
The algorithm is simply:
- Each player sends his commands to all other players every turn. (If they have nothing to order in particular, the message could just say "I have 0 commands for turn X".)
- Each player waits for all other players' commands before executing the
current turn.
So in the described scenario where PlayerA receives PlayerB's commands, but PlayerB does not receive PlayerA's commands, PlayerA executes the current turn, and then waits for PlayerB's commands before executing the next turn. Meanwhile, PlayerB is still waiting on PlayerA before executing the current turn. Since he is stuck at this turn, he won't be sending commands for the next one, and PlayerA will have to wait. The game is effectively paused for everyone until PlayerB gets the commands it is missing.
As this scenario illustrates (PlayerA is done executing the current turn, PlayerB hasn't), it is possible players aren't executing the same turns simultaneously; the synchronicity does not consist in simultaneity but that all players execute the same commands on the same turns.
The Baldur's Gate manual (Baldur's Gate is based on what was designed as an RTS engine originally) stated this:
Baldur’s Gate is an asynchronous game. If you happen to be playing
with some body whose system is very close by, you still might see
slightly different things happen on each system. The point to remember
is that while things happen somewhat differently, the result of the
actions is always the same.