2010-05-15 10 views
6

Duplicar posibles:
Is there a production ready lock-free queue or hash implementation in C++¿Existe una biblioteca de contenedores concurrente para C++

Busco implementaciones de contenedores sin bloqueo:

  • cola
  • Pila
  • Hash Mapa
  • etc ...

¿Qué hay de contenedores de bloqueo:

  • bloqueo de cola
  • bloqueo Pila

¿Hay buenas bibliotecas por ahí? Me gustaría abstenerme de escribir estas estructuras de datos ... Preferiría usar algo que haya sido probado por la comunidad.

+1

si usa la palabra "bloqueo", no está libre de cerrojo ... –

+0

@Evan, corregí mi pregunta, pero debería haber una manera de hacer una cola de bloqueo sin bloqueos usando CAS y algo así como un ManualResetEvent equivalente a C++ ... – Kiril

+0

@Link: CAS no se puede utilizar para implementar el bloqueo. En el mejor de los casos, podría usar spinlocks (lo que sería terrible para este tipo de cosas), pero necesita la ayuda del planificador (mutex/semáforo/etc) para bloquearlo realmente. –

Respuesta

4

Eche un vistazo a las clases de contenedores de Intel TBB. La referencia dice:

Las clases de contenedores permiten múltiples hilos para invocar simultáneamente ciertos métodos en el mismo contenedor.

3

Herb Sutter hizo algunos artículos en su serie de Concurrencia Efectiva en Dr. Dobbs Journal. Los dos artículos es probable que desee leer de inmediato son:

El rest of the series es definitivamente vale la pena leer también.

+0

gracias ... Sé que hay artículos que describen cómo escribir estos contenedores, pero preferiría usar una biblioteca probada en lugar de escribir los contenedores yo mismo. – Kiril

+0

@Lirik: La razón principal por la que los relaciono es porque Herb hace un debate * muy * profundo sobre cómo y por qué funciona, y qué peligros existen al escribirlo. También tiene ejemplos completos y de trabajo que he copiado y usado textualmente con éxito. (Aunque esperan un compilador compatible con C++ 0x o un tipo 'atómico <>' equivalente). – greyfade

Cuestiones relacionadas