I have a program which generates events. They are ordered with a Lamport clock and sent over the network. They may arrive in a different order. On the receiving end I have an object which re-orders the events. This object can be popped like a queue and either returns the next event according to the Lamport clock or fails. It can filter the duplicate events out if any. It is thread-safe so that events can be pushed and popped in parallel.
This sounds like a well-known pattern. Is it the case, and if so is there a standard name for this object?