2012-02-20 26 views

Respuesta

9

Una política de lanzamiento de std::launch::async | std::launch::deferred significa que la implementación puede elegir aplicar una política de std::launch::async o std::launch::deferred. Esta elección puede variar de llamada a llamada, y no se puede decidir de inmediato.

Una implementación que siempre elige uno u otro es por lo tanto legal (que es lo que gcc, eligiendo siempre diferido), como es el que elige std::launch::async hasta que se alcanza cierto límite, y luego cambia a std::launch::deferred.

También significa que la implementación puede diferir la elección hasta más tarde. Esto significa que la implementación puede esperar para tomar una decisión hasta que su mano sea forzada por una llamada que tenga efectos visiblemente distintos de las tareas diferidas y asíncronas, o hasta que el número de tareas en ejecución sea menor que el límite de la tarea interna. Esto es lo que hace just::thread.

Las funciones que obligan a la decisión son: wait(), get(), wait_for(), wait_until(), y el destructor del último objeto futura referencia al resultado.

+3

¿Qué, gcc siempre usa 'diferido'? Agradable, mucho para "dejar que la implementación decida qué es lo mejor para ti";) –

3

Chaprer 30.6.8 de la norma ISO IEC 14882 hasta 2011 explica que launch::async | launch::deferred significa implementations should defer invocation or the selection of the policy when no more concurrency can be effectively exploited (igual que async sin policy parámetro).

En la práctica, significa que el tiempo de ejecución de C++ debe iniciar nuevos subprocesos para cada async, siempre que haya núcleos de CPU no utilizados.

+0

Sí, lo vi, pero ¿qué significa eso en la práctica? – ronag

+1

Encontré la cita siguiente que me dejó más claro: "depende de la implementación si se realiza una ejecución asincrónica o una evaluación diferida". – ronag

+0

Offtopic: ¿Pero qué ocurre con los lanzamientos diferidos cuando '.get()' nunca se llama y el futuro simplemente se destruye? – ronag

Cuestiones relacionadas