АК
если колбеков не очень много, то ответ: лок-фри лист. добавлять\удалять\итерироваться можно.
если колбеков настолько много, что бежать по списку для поиска становится дорого, то если вообще не думать, то можно просто завести мэппинг для того чтобы запоминать указатель на позицию в списке и делать удаление\добавление за О(1) а не за О(н), но уже с мютексом для доступа к этому мэпу. если мэппинг становится узким местом, то, если совсем не думать, его можно разбивать на бакеты, в каждом из которых свой мютекс. хотя для этого наверняка что-то есть более изящное