En el tiempo de ejecución de concurrencia introducido en VS2010, hay una clase concurrent_queue. Tiene una función try_pop() sin bloqueo.
Similar en Intel Thread Building Blocks (TBB), la llamada pop() de bloqueo se eliminó al pasar de la versión 2.1 a la versión 2.2.¿Por qué concurrent_queue no bloquea?
Me pregunto cuál es el problema con una llamada de bloqueo. ¿Por qué fue eliminado de TBB? ¿Y por qué no hay bloqueo concurrent_queue?
Estoy en una situación en la que necesito una cola concurrente de bloqueo, y no quiero una espera ocupada. Además de escribir una cola, ¿hay alguna otra posibilidad en el tiempo de ejecución de simultaneidad?
Con un 'pop' bloqueo, se puede poner en práctica * * "clásico productor-consumidor" por medio de TBB en cerca de dos líneas de código, sin necesidad de escribir ningún primitivas de sincronización usted mismo. (El consumidor hace 'while (true) consume (Q.pop());' y el productor hace 'while (true) Q.push (produce());'.) Sin un bloqueo 'pop', el mismo problema requiere al menos el doble de código: a saber, la contabilidad una variable de condición adicional por cola. Pero como dice paxdiablo, 'tbb :: concurrent_bounded_queue' continúa proporcionando la funcionalidad de bloqueo' pop', y es básicamente un reemplazo directo para 'concurrent_queue'. – Quuxplusone