>>31
Generally this is resolved through a system called priority. Every action is assigned a value that is compared to the value of all other actions that occured within the smallest time unit. Then every set of actions with priority X, starting at 0 and going up to the highest value of X, is resolved simultaneously - or rather, the result mimics a simultaneous result. This, however, mandates multiple passes over the same entities and so is at the best case twice as slow.
The two environment approach sounds pretty interesting and similar to some techniques involving reflection.