Как уже говорили другие, то, как вы это написали, просто отлично, и, в общем, ничего не произойдет немедленно при передаче указателя на объект в стеке в другой поток, если все синхронизировано.Тем не менее, я склонен немного напрягаться при этом, потому что вещи, которые кажутся потокобезопасными, могут выйти из своего запланированного порядка, когда происходит исключение или если один из потоков связан с асинхронными обратными вызовами ввода-вывода.В случае возникновения исключения в другом потоке во время вашего вызова SendMessage, он может немедленно вернуть 0.Если исключение позднее обрабатывается в другом потоке, у вас может быть нарушение прав доступа.Еще одна потенциальная опасность заключается в том, что все, что хранится в стеке, никогда не может быть принудительно удалено из другого потока.Если он застрянет в ожидании какого-то обратного вызова, объекта и т. Д. Навсегда, и пользователь решил отменить или закрыть приложение, у рабочего потока не будет возможности убедиться, что остановленный поток убрал все объекты в своем стеке.
Моя точка зрения такова: в простых сценариях, которые вы описали, где все работает идеально, ничего не меняется и не происходит сбой внешних зависимостей, совместное использование указателей на локальный стек безопасно, но поскольку распределение в куче являетсяна самом деле все так же просто, и это дает вам возможность явно контролировать время жизни объекта из любого потока в смягчающих обстоятельствах, почему бы просто не использовать кучу?
Наконец, я настоятельно рекомендую вам быть очень осторожным с элементом void * chunk_ вашей структуры MyData, поскольку он не является потокобезопасным, как описано, если он копируется в другой поток.