2012-08-23 22 views
11

¿Hay una cola de prioridad mutable simultánea? Idealmente, estoy buscando una implementación C++, pero, para empezar, un puntero a un algoritmo sería muy útil.Coleta de prioridad variable simultánea

Para ser claro, estoy buscando una cola de prioridad donde pueda ajustar las prioridades de los elementos. En particular, TBB concurrent_priority_queue no proporciona la funcionalidad necesaria. (Para el caso, tampoco lo hace STL priority_queue, incluso si ignoramos la concurrencia). La biblioteca Boost.Heap proporciona la funcionalidad serial que yo quiero, pero sin concurrencia. Naturalmente, estoy buscando algo más fino que simplemente bloquear toda la cola en cada operación.

+0

Sospecho que cualquier cola de este tipo necesitaría un bloqueo grueso o realmente muchos bloqueos de grano fino y ninguno sería demasiado eficiente. Pero puede haber otro enfoque a su problema. ¿Cuál es tu caso de uso? –

+0

Sí ... No puedo ver rápidamente ninguna forma de hacer tal cosa de manera confiable. ¿Es tan importante un bloqueo futex/criticalSection? No puede tomar tanto tiempo quitar un puntero de un lugar en un árbol e insertarlo en otro lugar (o mover un puntero de una colección a otra, o lo que sea necesario en la implementación de la lista de prioridades). –

+0

Bueno, realmente esperaba una estructura de datos sin bloqueo. En cuanto a las actualizaciones, con las estructuras de datos habituales están bastante involucradas: no solo está moviendo un puntero de un lugar a otro, sino que tiene que reequilibrar un árbol o hacer una operación similar. – foxcub

Respuesta

9

Una cola de prioridad simultánea a menudo se implementa utilizando una lista de skiplist, por lo que Facebook ConcurrentSkipList puede ajustarse a sus necesidades.

+0

Excelente sugerencia. Muchas gracias por el puntero. Solo desearía que tuvieran una página de documentación para esta clase. – foxcub