Я читаю код в движке флаттера по адресу
https://github.com/flutter/engine/blob/main/shell/common/platform_view.cc#L58
Я хочу спросить: если latch.Signal() будет достигнуто раньше latch.Wait(), будет ли это ждать бесконечно? Если этого случая никогда не произойдет, то как это обеспечивается?
void PlatformView::NotifyCreated() {
std::unique_ptr<Surface> surface;
// Threading: We want to use the platform view on the non-platform thread.
// Using the weak pointer is illegal. But, we are going to introduce a latch
// so that the platform view is not collected till the surface is obtained.
auto* platform_view = this;
fml::ManualResetWaitableEvent latch;
fml::TaskRunner::RunNowOrPostTask(
task_runners_.GetRasterTaskRunner(), [platform_view, &surface, &latch]() {
surface = platform_view->CreateRenderingSurface();
if (surface && !surface->IsValid()) {
surface.reset();
}
latch.Signal();
});
latch.Wait();
if (!surface) {
FML_LOG(ERROR) << "Failed to create platform view rendering surface";
return;
}
delegate_.OnPlatformViewCreated(std::move(surface));
}
объясните детали кода и дополнительную информацию об используемом им мьютексе. Анализ возможностей планирования ЦП.





если вы посмотрите на его текущую реализацию
у защелки есть логическое значение, которое она устанавливает при получении сигнала, а затем, когда Wait происходит позже, она видит, что логическое значение уже установлено, и не ждет.