У меня есть хорошее назначение программирования ядра, включающее новый метод блокировки ядра, и моя группа и я решили реализовать его как оболочку вокруг завершения. Однако спецификация требует, чтобы мы возвращали количество процессов, уведомленных нашим методом, что включало возвращение количества процессов, которые пробуждались complete_all в нашей реализации.Есть ли какой-либо безопасный способ получить количество задач, ожидающих в настоящее время при завершении?
Как мы можем получить этот номер? Казалось бы, достаточно зафиксировать завершение своей внутренней спин-блокировкой, подсчитать количество элементов и затем разблокировать ее. Этот метод является безопасным, поскольку наши функции являются единственными, кто имеет доступ к конкретному завершению.
Итак, вопрос в том, является ли конструкция завершением непрозрачной? Если это так, приемлемо ли было бы для того, чтобы наша домашняя работа была сделана вовремя для промежуточного сезона, игнорировать эту непрозрачность? Или, есть ли способ сделать это без хаков?
Не complete_all просто пробуждает все процессы? Я вообще не хожу по списку процессов, я просто звоню в full_all и позволяю ему делать это. – Alex
Да complete_all() пробуждает все процессы, и при этом он должен знать, сколько всего «всего», и оно может вернуть это вам. Кто-то может возразить, что это взломать, но я думаю, что это разумное решение, и это чище, чем просто переходить в список, чтобы получить счет. – mpe