In stead of passing a number and keeping a map, you can use the security object as the correlationID
Then, when you get a tick, instead of getting the counter and looking up the mapped security, you can just cast the correlationID pointer to the security object's type and directly apply any changes to the security object
No lookups needed, and there are no concerns about synchronization on the map.