Что произойдет, если complete_all()
вызывается на объекте завершения (от задачи B) до задачи получает сделать wait_for_completion()
на объекте завершения? Есть ли какой-нибудь API, чтобы найти, если объект уже завершен во время ожидания и сразу же возвращается? Одним из способов может быть использование mutex
, который заблокирован перед отправкой сообщения и разблокирован до ожидания. Эта блокировка должна быть приобретена до complete_all()
и выпущена после, но задается вопросом, есть ли более чистый/лучший способ. Любые идеи приветствуются.Завершение объекта состояние гонки
Более контекст:Задача A инициализирует объект завершения, посылает запрос на задачи B вместе с адресом объекта завершения, а затем ожидает завершения. Задача B выполняет некоторую обработку при получении сообщения, а затем делает complete_all()
на объекте завершения.
Ядро уже обрабатывает этот случай afair. –