I have an interactive provider, that uses a dedicated thread per connected consumer to build up EMA messages and send them to the corresponding consumer.
Of course I use individual message objects per thread, of type RefreshMsg / UpdateMsg with a FieldList therein.
However, if the code that fills the message objects is not lock-protected, the data sent to to the consumers get corrupted (the fields in the field list get random values). If there is a lock protection arround the code, which fills the (thread-specific!) message objects, everything works fine. Obviously it is not safe, to build (different!) messages at the same time in multiple threads. Why ?!?
This is annoying, because the lock protection slows down the program.